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

来源:互联网 发布:阿里体育 巨人网络 编辑:程序博客网 时间:2024/06/05 15:42
  http://blog.csdn.net/niuwei22007/article/details/49053771原地址可以查看更多文章
      下面这些例子是keras前期版本的,现在已经升级到了keras0.3.0,以下代码需要进行修改才可以。如今的代码更简洁,使用更方便,不需要自己计算每一层的输入shape,除了第一层。

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

No.0Keras实现MNIST识别。

[python] view plain copy
  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 plain copy
  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 plain copy
  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 plain copy
  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 plain copy
  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 plain copy
  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


转载来自:http://blog.csdn.net/niuwei22007/article/details/49053771

0 0