keras实现常用深度学习模型LeNet,AlexNet,ZFNet,VGGNet,GoogleNet,Resnet

转载自:点击打开链接

LeNet

[python]  view plain  copy
  1. #coding=utf-8  
  2. from keras.models import Sequential  
  3. from keras.layers import Dense,Flatten  
  4. from keras.layers.convolutional import Conv2D,MaxPooling2D  
  5. from keras.utils.np_utils import to_categorical  
  6. import cPickle  
  7. import gzip  
  8. import numpy as np  
  9. seed = 7  
  10. np.random.seed(seed)  
  11.   
  12. data = gzip.open(r'/media/wmy/document/BigData/kaggle/Digit Recognizer/mnist.pkl.gz')  
  13. train_set,valid_set,test_set = cPickle.load(data)  
  14. #train_x is [0,1]  
  15. train_x = train_set[0].reshape((-1,28,28,1))  
  16. train_y = to_categorical(train_set[1])  
  17.   
  18. valid_x = valid_set[0].reshape((-1,28,28,1))  
  19. valid_y = to_categorical(valid_set[1])  
  20.   
  21. test_x = test_set[0].reshape((-1,28,28,1))  
  22. test_y = to_categorical(test_set[1])  
  23.   
  24. model = Sequential()  
  25. model.add(Conv2D(32,(5,5),strides=(1,1),input_shape=(28,28,1),padding='valid',activation='relu',kernel_initializer='uniform'))  
  26. model.add(MaxPooling2D(pool_size=(2,2)))  
  27. model.add(Conv2D(64,(5,5),strides=(1,1),padding='valid',activation='relu',kernel_initializer='uniform'))  
  28. model.add(MaxPooling2D(pool_size=(2,2)))  
  29. model.add(Flatten())  
  30. model.add(Dense(100,activation='relu'))  
  31. model.add(Dense(10,activation='softmax'))  
  32. model.compile(optimizer='sgd',loss='categorical_crossentropy',metrics=['accuracy'])  
  33. model.summary()  
  34.   
  35. model.fit(train_x,train_y,validation_data=(valid_x,valid_y),batch_size=20,epochs=20,verbose=2)  
  36. #[0.031825309940411217, 0.98979999780654904]  
  37. print model.evaluate(test_x,test_y,batch_size=20,verbose=2)  

AlexNet

[python]  view plain  copy
  1. #coding=utf-8  
  2. from keras.models import Sequential  
  3. from keras.layers import Dense,Flatten,Dropout  
  4. from keras.layers.convolutional import Conv2D,MaxPooling2D  
  5. from keras.utils.np_utils import to_categorical  
  6. import numpy as np  
  7. seed = 7  
  8. np.random.seed(seed)  
  9.   
  10. model = Sequential()  
  11. model.add(Conv2D(96,(11,11),strides=(4,4),input_shape=(227,227,3),padding='valid',activation='relu',kernel_initializer='uniform'))  
  12. model.add(MaxPooling2D(pool_size=(3,3),strides=(2,2)))  
  13. model.add(Conv2D(256,(5,5),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  14. model.add(MaxPooling2D(pool_size=(3,3),strides=(2,2)))  
  15. model.add(Conv2D(384,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  16. model.add(Conv2D(384,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  17. model.add(Conv2D(256,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  18. model.add(MaxPooling2D(pool_size=(3,3),strides=(2,2)))  
  19. model.add(Flatten())  
  20. model.add(Dense(4096,activation='relu'))  
  21. model.add(Dropout(0.5))  
  22. model.add(Dense(4096,activation='relu'))  
  23. model.add(Dropout(0.5))  
  24. model.add(Dense(1000,activation='softmax'))  
  25. model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])  
  26. model.summary()  

ZFNet

[python]  view plain  copy
  1. #coding=utf-8  
  2. from keras.models import Sequential  
  3. from keras.layers import Dense,Flatten,Dropout  
  4. from keras.layers.convolutional import Conv2D,MaxPooling2D  
  5. from keras.utils.np_utils import to_categorical  
  6. import numpy as np  
  7. seed = 7  
  8. np.random.seed(seed)  
  9.   
  10. model = Sequential()  
  11. model.add(Conv2D(96,(7,7),strides=(2,2),input_shape=(224,224,3),padding='valid',activation='relu',kernel_initializer='uniform'))  
  12. model.add(MaxPooling2D(pool_size=(3,3),strides=(2,2)))  
  13. model.add(Conv2D(256,(5,5),strides=(2,2),padding='same',activation='relu',kernel_initializer='uniform'))  
  14. model.add(MaxPooling2D(pool_size=(3,3),strides=(2,2)))  
  15. model.add(Conv2D(384,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  16. model.add(Conv2D(384,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  17. model.add(Conv2D(256,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  18. model.add(MaxPooling2D(pool_size=(3,3),strides=(2,2)))  
  19. model.add(Flatten())  
  20. model.add(Dense(4096,activation='relu'))  
  21. model.add(Dropout(0.5))  
  22. model.add(Dense(4096,activation='relu'))  
  23. model.add(Dropout(0.5))  
  24. model.add(Dense(1000,activation='softmax'))  
  25. model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])  
  26. model.summary()  

VGG-13

[python]  view plain  copy
  1. #coding=utf-8  
  2. from keras.models import Sequential  
  3. from keras.layers import Dense,Flatten,Dropout  
  4. from keras.layers.convolutional import Conv2D,MaxPooling2D  
  5. import numpy as np  
  6. seed = 7  
  7. np.random.seed(seed)  
  8.   
  9. model = Sequential()  
  10. model.add(Conv2D(64,(3,3),strides=(1,1),input_shape=(224,224,3),padding='same',activation='relu',kernel_initializer='uniform'))  
  11. model.add(Conv2D(64,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  12. model.add(MaxPooling2D(pool_size=(2,2)))  
  13. model.add(Conv2D(128,(3,2),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  14. model.add(Conv2D(128,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  15. model.add(MaxPooling2D(pool_size=(2,2)))  
  16. model.add(Conv2D(256,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  17. model.add(Conv2D(256,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  18. model.add(MaxPooling2D(pool_size=(2,2)))  
  19. model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  20. model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  21. model.add(MaxPooling2D(pool_size=(2,2)))  
  22. model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  23. model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  24. model.add(MaxPooling2D(pool_size=(2,2)))  
  25. model.add(Flatten())  
  26. model.add(Dense(4096,activation='relu'))  
  27. model.add(Dropout(0.5))  
  28. model.add(Dense(4096,activation='relu'))  
  29. model.add(Dropout(0.5))  
  30. model.add(Dense(1000,activation='softmax'))  
  31. model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])  
  32. model.summary()  

VGG-16


[python]  view plain  copy
  1. #coding=utf-8  
  2. from keras.models import Sequential  
  3. from keras.layers import Dense,Flatten,Dropout  
  4. from keras.layers.convolutional import Conv2D,MaxPooling2D  
  5. import numpy as np  
  6. seed = 7  
  7. np.random.seed(seed)  
  8.   
  9. model = Sequential()  
  10. model.add(Conv2D(64,(3,3),strides=(1,1),input_shape=(224,224,3),padding='same',activation='relu',kernel_initializer='uniform'))  
  11. model.add(Conv2D(64,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  12. model.add(MaxPooling2D(pool_size=(2,2)))  
  13. model.add(Conv2D(128,(3,2),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  14. model.add(Conv2D(128,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  15. model.add(MaxPooling2D(pool_size=(2,2)))  
  16. model.add(Conv2D(256,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  17. model.add(Conv2D(256,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  18. model.add(Conv2D(256,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  19. model.add(MaxPooling2D(pool_size=(2,2)))  
  20. model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  21. model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  22. model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  23. model.add(MaxPooling2D(pool_size=(2,2)))  
  24. model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  25. model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  26. model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))  
  27. model.add(MaxPooling2D(pool_size=(2,2)))  
  28. model.add(Flatten())  
  29. model.add(Dense(4096,activation='relu'))  
  30. model.add(Dropout(0.5))  
  31. model.add(Dense(4096,activation='relu'))  
  32. model.add(Dropout(0.5))  
  33. model.add(Dense(1000,activation='softmax'))  
  34. model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])  
  35. model.summary()  

GoogleNet

[python]  view plain  copy
  1. #coding=utf-8  
  2. from keras.models import Model  
  3. from keras.layers import Input,Dense,Dropout,BatchNormalization,Conv2D,MaxPooling2D,AveragePooling2D,concatenate  
  4. from keras.layers.convolutional import Conv2D,MaxPooling2D,AveragePooling2D  
  5. import numpy as np  
  6. seed = 7  
  7. np.random.seed(seed)  
  8.   
  9. def Conv2d_BN(x, nb_filter,kernel_size, padding='same',strides=(1,1),name=None):  
  10.     if name is not None:  
  11.         bn_name = name + '_bn'  
  12.         conv_name = name + '_conv'  
  13.     else:  
  14.         bn_name = None  
  15.         conv_name = None  
  16.   
  17.     x = Conv2D(nb_filter,kernel_size,padding=padding,strides=strides,activation='relu',name=conv_name)(x)  
  18.     x = BatchNormalization(axis=3,name=bn_name)(x)  
  19.     return x  
  20.   
  21. def Inception(x,nb_filter):  
  22.     branch1x1 = Conv2d_BN(x,nb_filter,(1,1), padding='same',strides=(1,1),name=None)  
  23.   
  24.     branch3x3 = Conv2d_BN(x,nb_filter,(1,1), padding='same',strides=(1,1),name=None)  
  25.     branch3x3 = Conv2d_BN(branch3x3,nb_filter,(3,3), padding='same',strides=(1,1),name=None)  
  26.   
  27.     branch5x5 = Conv2d_BN(x,nb_filter,(1,1), padding='same',strides=(1,1),name=None)  
  28.     branch5x5 = Conv2d_BN(branch5x5,nb_filter,(1,1), padding='same',strides=(1,1),name=None)  
  29.   
  30.     branchpool = MaxPooling2D(pool_size=(3,3),strides=(1,1),padding='same')(x)  
  31.     branchpool = Conv2d_BN(branchpool,nb_filter,(1,1),padding='same',strides=(1,1),name=None)  
  32.   
  33.     x = concatenate([branch1x1,branch3x3,branch5x5,branchpool],axis=3)  
  34.   
  35.     return x  
  36.   
  37. inpt = Input(shape=(224,224,3))  
  38. #padding = 'same',填充为(步长-1)/2,还可以用ZeroPadding2D((3,3))  
  39. x = Conv2d_BN(inpt,64,(7,7),strides=(2,2),padding='same')  
  40. x = MaxPooling2D(pool_size=(3,3),strides=(2,2),padding='same')(x)  
  41. x = Conv2d_BN(x,192,(3,3),strides=(1,1),padding='same')  
  42. x = MaxPooling2D(pool_size=(3,3),strides=(2,2),padding='same')(x)  
  43. x = Inception(x,64)#256  
  44. x = Inception(x,120)#480  
  45. x = MaxPooling2D(pool_size=(3,3),strides=(2,2),padding='same')(x)  
  46. x = Inception(x,128)#512  
  47. x = Inception(x,128)  
  48. x = Inception(x,128)  
  49. x = Inception(x,132)#528  
  50. x = Inception(x,208)#832  
  51. x = MaxPooling2D(pool_size=(3,3),strides=(2,2),padding='same')(x)  
  52. x = Inception(x,208)  
  53. x = Inception(x,256)#1024  
  54. x = AveragePooling2D(pool_size=(7,7),strides=(7,7),padding='same')(x)  
  55. x = Dropout(0.4)(x)  
  56. x = Dense(1000,activation='relu')(x)  
  57. x = Dense(1000,activation='softmax')(x)  
  58. model = Model(inpt,x,name='inception')  
  59. model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])  
  60. model.summary()  

Resnet-34


[python]  view plain  copy
  1. #coding=utf-8  
  2. from keras.models import Model  
  3. from keras.layers import Input,Dense,Dropout,BatchNormalization,Conv2D,MaxPooling2D,AveragePooling2D,concatenate,Activation,ZeroPadding2D  
  4. from keras.layers import add,Flatten  
  5. #from keras.layers.convolutional import Conv2D,MaxPooling2D,AveragePooling2D  
  6. import numpy as np  
  7. seed = 7  
  8. np.random.seed(seed)  
  9.   
  10. def Conv2d_BN(x, nb_filter,kernel_size, strides=(1,1), padding='same',name=None):  
  11.     if name is not None:  
  12.         bn_name = name + '_bn'  
  13.         conv_name = name + '_conv'  
  14.     else:  
  15.         bn_name = None  
  16.         conv_name = None  
  17.   
  18.     x = Conv2D(nb_filter,kernel_size,padding=padding,strides=strides,activation='relu',name=conv_name)(x)  
  19.     x = BatchNormalization(axis=3,name=bn_name)(x)  
  20.     return x  
  21.   
  22. def Conv_Block(inpt,nb_filter,kernel_size,strides=(1,1), with_conv_shortcut=False):  
  23.     x = Conv2d_BN(inpt,nb_filter=nb_filter,kernel_size=kernel_size,strides=strides,padding='same')  
  24.     x = Conv2d_BN(x, nb_filter=nb_filter, kernel_size=kernel_size,padding='same')  
  25.     if with_conv_shortcut:  
  26.         shortcut = Conv2d_BN(inpt,nb_filter=nb_filter,strides=strides,kernel_size=kernel_size)  
  27.         x = add([x,shortcut])  
  28.         return x  
  29.     else:  
  30.         x = add([x,inpt])  
  31.         return x  
  32.   
  33. inpt = Input(shape=(224,224,3))  
  34. x = ZeroPadding2D((3,3))(inpt)  
  35. x = Conv2d_BN(x,nb_filter=64,kernel_size=(7,7),strides=(2,2),padding='valid')  
  36. x = MaxPooling2D(pool_size=(3,3),strides=(2,2),padding='same')(x)  
  37. #(56,56,64)  
  38. x = Conv_Block(x,nb_filter=64,kernel_size=(3,3))  
  39. x = Conv_Block(x,nb_filter=64,kernel_size=(3,3))  
  40. x = Conv_Block(x,nb_filter=64,kernel_size=(3,3))  
  41. #(28,28,128)  
  42. x = Conv_Block(x,nb_filter=128,kernel_size=(3,3),strides=(2,2),with_conv_shortcut=True)  
  43. x = Conv_Block(x,nb_filter=128,kernel_size=(3,3))  
  44. x = Conv_Block(x,nb_filter=128,kernel_size=(3,3))  
  45. x = Conv_Block(x,nb_filter=128,kernel_size=(3,3))  
  46. #(14,14,256)  
  47. x = Conv_Block(x,nb_filter=256,kernel_size=(3,3),strides=(2,2),with_conv_shortcut=True)  
  48. x = Conv_Block(x,nb_filter=256,kernel_size=(3,3))  
  49. x = Conv_Block(x,nb_filter=256,kernel_size=(3,3))  
  50. x = Conv_Block(x,nb_filter=256,kernel_size=(3,3))  
  51. x = Conv_Block(x,nb_filter=256,kernel_size=(3,3))  
  52. x = Conv_Block(x,nb_filter=256,kernel_size=(3,3))  
  53. #(7,7,512)  
  54. x = Conv_Block(x,nb_filter=512,kernel_size=(3,3),strides=(2,2),with_conv_shortcut=True)  
  55. x = Conv_Block(x,nb_filter=512,kernel_size=(3,3))  
  56. x = Conv_Block(x,nb_filter=512,kernel_size=(3,3))  
  57. x = AveragePooling2D(pool_size=(7,7))(x)  
  58. x = Flatten()(x)  
  59. x = Dense(1000,activation='softmax')(x)  
  60.   
  61. model = Model(inputs=inpt,outputs=x)  
  62. model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])  
  63. model.summary()  

Resnet-50

[python]  view plain  copy
  1. #coding=utf-8  
  2. from keras.models import Model  
  3. from keras.layers import Input,Dense,BatchNormalization,Conv2D,MaxPooling2D,AveragePooling2D,ZeroPadding2D  
  4. from keras.layers import add,Flatten  
  5. #from keras.layers.convolutional import Conv2D,MaxPooling2D,AveragePooling2D  
  6. from keras.optimizers import SGD  
  7. import numpy as np  
  8. seed = 7  
  9. np.random.seed(seed)  
  10.   
  11. def Conv2d_BN(x, nb_filter,kernel_size, strides=(1,1), padding='same',name=None):  
  12.     if name is not None:  
  13.         bn_name = name + '_bn'  
  14.         conv_name = name + '_conv'  
  15.     else:  
  16.         bn_name = None  
  17.         conv_name = None  
  18.   
  19.     x = Conv2D(nb_filter,kernel_size,padding=padding,strides=strides,activation='relu',name=conv_name)(x)  
  20.     x = BatchNormalization(axis=3,name=bn_name)(x)  
  21.     return x  
  22.   
  23. def Conv_Block(inpt,nb_filter,kernel_size,strides=(1,1), with_conv_shortcut=False):  
  24.     x = Conv2d_BN(inpt,nb_filter=nb_filter[0],kernel_size=(1,1),strides=strides,padding='same')  
  25.     x = Conv2d_BN(x, nb_filter=nb_filter[1], kernel_size=(3,3), padding='same')  
  26.     x = Conv2d_BN(x, nb_filter=nb_filter[2], kernel_size=(1,1), padding='same')  
  27.     if with_conv_shortcut:  
  28.         shortcut = Conv2d_BN(inpt,nb_filter=nb_filter[2],strides=strides,kernel_size=kernel_size)  
  29.         x = add([x,shortcut])  
  30.         return x  
  31.     else:  
  32.         x = add([x,inpt])  
  33.         return x  
  34.   
  35. inpt = Input(shape=(224,224,3))  
  36. x = ZeroPadding2D((3,3))(inpt)  
  37. x = Conv2d_BN(x,nb_filter=64,kernel_size=(7,7),strides=(2,2),padding='valid')  
  38. x = MaxPooling2D(pool_size=(3,3),strides=(2,2),padding='same')(x)  
  39.   
  40. x = Conv_Block(x,nb_filter=[64,64,256],kernel_size=(3,3),strides=(1,1),with_conv_shortcut=True)  
  41. x = Conv_Block(x,nb_filter=[64,64,256],kernel_size=(3,3))  
  42. x = Conv_Block(x,nb_filter=[64,64,256],kernel_size=(3,3))  
  43.   
  44. x = Conv_Block(x,nb_filter=[128,128,512],kernel_size=(3,3),strides=(2,2),with_conv_shortcut=True)  
  45. x = Conv_Block(x,nb_filter=[128,128,512],kernel_size=(3,3))  
  46. x = Conv_Block(x,nb_filter=[128,128,512],kernel_size=(3,3))  
  47. x = Conv_Block(x,nb_filter=[128,128,512],kernel_size=(3,3))  
  48.   
  49. x = Conv_Block(x,nb_filter=[256,256,1024],kernel_size=(3,3),strides=(2,2),with_conv_shortcut=True)  
  50. x = Conv_Block(x,nb_filter=[256,256,1024],kernel_size=(3,3))  
  51. x = Conv_Block(x,nb_filter=[256,256,1024],kernel_size=(3,3))  
  52. x = Conv_Block(x,nb_filter=[256,256,1024],kernel_size=(3,3))  
  53. x = Conv_Block(x,nb_filter=[256,256,1024],kernel_size=(3,3))  
  54. x = Conv_Block(x,nb_filter=[256,256,1024],kernel_size=(3,3))  
  55.   
  56. x = Conv_Block(x,nb_filter=[512,512,2048],kernel_size=(3,3),strides=(2,2),with_conv_shortcut=True)  
  57. x = Conv_Block(x,nb_filter=[512,512,2048],kernel_size=(3,3))  
  58. x = Conv_Block(x,nb_filter=[512,512,2048],kernel_size=(3,3))  
  59. x = AveragePooling2D(pool_size=(7,7))(x)  
  60. x = Flatten()(x)  
  61. x = Dense(1000,activation='softmax')(x)  
  62.   
  63. model = Model(inputs=inpt,outputs=x)  
  64. sgd = SGD(decay=0.0001,momentum=0.9)  
  65. model.compile(loss='categorical_crossentropy',optimizer=sgd,metrics=['accuracy'])  
  66. model.summary()  

猜你喜欢

转载自blog.csdn.net/jiangjiang_jian/article/details/80371682