基于Theano的深度学习(Deep Learning)框架Keras学习随笔-02-Example

来源:互联网 发布:网络歌曲被下架 编辑:程序博客网 时间:2024/06/10 03:58

这上面的keras系列文章还可以http://blog.csdn.net/niuwei22007/article/details/49053771

    http://blog.csdn.net/niuwei22007/article/details/49053771原地址可以查看更多文章
      下面这些例子是keras前期版本的,现在已经升级到了keras0.3.0,以下代码需要进行修改才可以。如今的代码更简洁,使用更方便,不需要自己计算每一层的输入shape,除了第一层。

下面来看几个例子,来了解一下Keras的便捷之处。不需要具体去研究代码的意思,只需要看一下这个实现过程。用编程的装饰模式把各个组件模块化,然后可以自己随意的拼装。首先介绍一个基于Keras做的手写MNIST识别的代码,剩下的就看一下实现过程即可。

No.0Keras实现MNIST识别。

[python] view plaincopy
  1. from keras.models import Sequential   
  2. from keras.layers.core import Dense, Dropout,Activation   
  3. from keras.optimizers import SGD   
  4. from keras.datasets import mnist   
  5.    
  6. import numpy  
  7.    
  8. model = Sequential()   
  9. model.add(Dense(784500, init='glorot_uniform')) # 输入层,28*28=784   
  10. model.add(Activation('tanh')) # 激活函数是tanh   
  11. model.add(Dropout(0.5)) # 采用50%的dropout  
  12.    
  13. model.add(Dense(500500, init='glorot_uniform')) # 隐层节点500个   
  14. model.add(Activation('tanh'))   
  15. model.add(Dropout(0.5))  
  16.    
  17. # 输出结果是10个类别,所以维度是10  
  18. model.add(Dense(50010, init='glorot_uniform'))  
  19. model.add(Activation('softmax')) # 最后一层用softmax  
  20.    
  21. # 设定学习率(lr)等参数   
  22. sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9,nesterov=True)    
  23. # 使用交叉熵作为loss函数,就是熟知的log损失函数  
  24. model.compile(loss='categorical_crossentropy',  
  25. optimizer=sgd, class_mode='categorical')  
  26. # 使用Keras自带的mnist工具读取数据(第一次需要联网)  
  27. (X_train, y_train), (X_test, y_test) = mnist.load_data()  
  28. # 由于输入数据维度是(num, 28, 28),这里需要把后面的维度直接拼起来变成784维  
  29. X_train = X_train.reshape(X_train.shape[0],  
  30. X_train.shape[1]* X_train.shape[2])  
  31. X_test = X_test.reshape(X_test.shape[0], X_test.shape[1]* X_test.shape[2])   
  32. # 这里需要把index转换成一个one hot的矩阵  
  33. Y_train = (numpy.arange(10) == y_train[:,None]).astype(int)   
  34. Y_test = (numpy.arange(10) == y_test[:,None]).astype(int)  
  35.    
  36. # 开始训练,这里参数比较多。batch_size就是batch_size,nb_epoch就是最多迭代的次数, shuffle就是是否把数据随机打乱之后再进行训练  
  37. # verbose是屏显模式,官方这么说的:verbose: 0 forno logging to stdout, 1 for progress bar logging, 2 for one log line per epoch.  
  38. # 就是说0是不屏显,1是显示一个进度条,2是每个epoch都显示一行数据  
  39. # show_accuracy就是显示每次迭代后的正确率  
  40. # validation_split就是拿出百分之多少用来做交叉验证  
  41. model.fit(X_train, Y_train, batch_size=200, nb_epoch=100,shuffle=True, verbose=1, show_accuracy=True, validation_split=0.3)   
  42. print 'test set'   
  43. model.evaluate(X_test, Y_test, batch_size=200,show_accuracy=True, verbose=1)  

No.1Keras实现MLP(1)

[python] view plaincopy
  1. from keras.models import Sequential  
  2. from keras.layers.core import Dense, Dropout, Activation  
  3. from keras.optimizers import SGD  
  4.    
  5. model = Sequential()  
  6. # Dense(input, output, init=’wegiths initial method’)  
  7. model.add(Dense(2064, init='uniform'))  
  8. model.add(Activation('tanh')) # 激活函数  
  9. model.add(Dropout(0.5))     #采用50%的dropout  
  10.    
  11. model.add(Dense(6464, init='uniform'))  
  12. model.add(Activation('tanh'))  
  13. model.add(Dropout(0.5))  
  14.    
  15. model.add(Dense(642, init='uniform'))  
  16. model.add(Activation('softmax'))  
  17.    
  18. sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)#设定学习速度,衰减量等  
  19. model.compile(loss='mean_squared_error', optimizer=sgd) #损失函数为均方误差  
  20.    
  21. # ………此处是加载训练数据的的代码。  
  22.    
  23. # 开始训练。nb_epoch是迭代次数,batcn_size是数据块大小。  
  24. model.fit(X_train, y_train, nb_epoch=20, batch_size=16)  
  25. score = model.evaluate(X_test, y_test, batch_size=16)  

No.2Keras实现MLP(2):比(1)更简洁

[python] view plaincopy
  1. model = Sequential()  
  2. model.add(Dense(2064, init='uniform', activation='tanh'))  
  3. model.add(Dropout(0.5))  
  4. model.add(Dense(6464, init='uniform', activation='tanh'))  
  5. model.add(Dropout(0.5))  
  6. model.add(Dense(642, init='uniform', activation='softmax'))  
  7.    
  8. sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)  
  9. model.compile(loss='mean_squared_error', optimizer=sgd)  

No.3 VGG-like卷积网络。

[python] view plaincopy
  1. from keras.models import Sequential  
  2. from keras.layers.core import Dense, Dropout, Activation,Flatten  
  3. from keras.layers.convolutional import Convolution2D,MaxPooling2D  
  4. from keras.optimizers import SGD  
  5.    
  6. model = Sequential()  
  7. model.add(Convolution2D(32333, border_mode='full'))  
  8. model.add(Activation('relu'))  
  9. model.add(Convolution2D(323233))  
  10. model.add(Activation('relu'))  
  11. model.add(MaxPooling2D(poolsize=(22)))  
  12. model.add(Dropout(0.25))  
  13.    
  14. model.add(Convolution2D(643233, border_mode='full'))  
  15. model.add(Activation('relu'))  
  16. model.add(Convolution2D(646433))  
  17. model.add(Activation('relu'))  
  18. model.add(MaxPooling2D(poolsize=(22)))  
  19. model.add(Dropout(0.25))  
  20.    
  21. model.add(Flatten())  
  22. model.add(Dense(64*8*8256))  
  23. model.add(Activation('relu'))  
  24. model.add(Dropout(0.5))  
  25.    
  26. model.add(Dense(25610))  
  27. model.add(Activation('softmax'))  
  28.    
  29. sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)  
  30. model.compile(loss='categorical_crossentropy',optimizer=sgd)  
  31.    
  32. model.fit(X_train, Y_train, batch_size=32, nb_epoch=1)  

No.4长短期记忆网络用于序列分类。

[python] view plaincopy
  1. from keras.models import Sequential  
  2. from keras.layers.core import Dense, Dropout, Activation,Flatten  
  3. from keras.layers.convolutional import Convolution2D,MaxPooling2D  
  4. from keras.optimizers import SGD  
  5.    
  6. model = Sequential()  
  7. model.add(Convolution2D(32333, border_mode='full'))  
  8. model.add(Activation('relu'))  
  9. model.add(Convolution2D(323233))  
  10. model.add(Activation('relu'))  
  11. model.add(MaxPooling2D(poolsize=(22)))  
  12. model.add(Dropout(0.25))  
  13.    
  14. model.add(Convolution2D(643233, border_mode='full'))  
  15. model.add(Activation('relu'))  
  16. model.add(Convolution2D(646433))  
  17. model.add(Activation('relu'))  
  18. model.add(MaxPooling2D(poolsize=(22)))  
  19. model.add(Dropout(0.25))  
  20.    
  21. model.add(Flatten())  
  22. model.add(Dense(64*8*8256))  
  23. model.add(Activation('relu'))  
  24. model.add(Dropout(0.5))  
  25.    
  26. model.add(Dense(25610))  
  27. model.add(Activation('softmax'))  
  28.    
  29. sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)  
  30. model.compile(loss='categorical_crossentropy',optimizer=sgd)  
  31.    
  32. model.fit(X_train, Y_train, batch_size=32, nb_epoch=1)  

No.5图像字幕识别。

[python] view plaincopy
  1. max_caption_len = 16  
  2.    
  3. model = Sequential()  
  4. model.add(Convolution2D(32333, border_mode='full'))  
  5. model.add(Activation('relu'))  
  6. model.add(Convolution2D(323233))  
  7. model.add(Activation('relu'))  
  8. model.add(MaxPooling2D(poolsize=(22)))  
  9.    
  10. model.add(Convolution2D(643233, border_mode='full'))  
  11. model.add(Activation('relu'))  
  12. model.add(Convolution2D(646433))  
  13. model.add(Activation('relu'))  
  14. model.add(MaxPooling2D(poolsize=(22)))  
  15.    
  16. model.add(Convolution2D(1286433, border_mode='full'))  
  17. model.add(Activation('relu'))  
  18. model.add(Convolution2D(12812833))  
  19. model.add(Activation('relu'))  
  20. model.add(MaxPooling2D(poolsize=(22)))  
  21.    
  22. model.add(Flatten())  
  23. model.add(Dense(128*4*4256))  
  24. model.add(Activation('relu'))  
  25. model.add(Dropout(0.5))  
  26.    
  27. model.add(RepeatVector(max_caption_len))  
  28. # the GRU below returns sequences of max_caption_lenvectors of size 256 (our word embedding size)  
  29. model.add(GRU(256256, return_sequences=True))  
  30.    
  31. model.compile(loss='mean_squared_error', optimizer='rmsprop')  
  32.    
  33. # "images" is a numpy array of shape(nb_samples, nb_channels=3, width, height)  
  34. # "captions" is a numpy array of shape(nb_samples, max_caption_len=16, embedding_dim=256)  
  35. # captions are supposed already embedded (dense vectors).  
  36. model.fit(images, captions, batch_size=16, nb_epoch=100)  


参考资料:

  1. 官方教程
  2. http://ju.outofmemory.cn/entry/188683


0 0
原创粉丝点击