转载自

LeNet

  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. data = gzip.open(r'/media/wmy/document/BigData/kaggle/Digit Recognizer/mnist.pkl.gz')
  12. train_set,valid_set,test_set = cPickle.load(data)
  13. #train_x is [0,1]
  14. train_x = train_set[0].reshape((-1,28,28,1))
  15. train_y = to_categorical(train_set[1])
  16. valid_x = valid_set[0].reshape((-1,28,28,1))
  17. valid_y = to_categorical(valid_set[1])
  18. test_x = test_set[0].reshape((-1,28,28,1))
  19. test_y = to_categorical(test_set[1])
  20. model = Sequential()
  21. model.add(Conv2D(32,(5,5),strides=(1,1),input_shape=(28,28,1),padding='valid',activation='relu',kernel_initializer='uniform'))
  22. model.add(MaxPooling2D(pool_size=(2,2)))
  23. model.add(Conv2D(64,(5,5),strides=(1,1),padding='valid',activation='relu',kernel_initializer='uniform'))
  24. model.add(MaxPooling2D(pool_size=(2,2)))
  25. model.add(Flatten())
  26. model.add(Dense(100,activation='relu'))
  27. model.add(Dense(10,activation='softmax'))
  28. model.compile(optimizer='sgd',loss='categorical_crossentropy',metrics=['accuracy'])
  29. model.summary()
  30. model.fit(train_x,train_y,validation_data=(valid_x,valid_y),batch_size=20,epochs=20,verbose=2)
  31. #[0.031825309940411217, 0.98979999780654904]
  32. print model.evaluate(test_x,test_y,batch_size=20,verbose=2)

AlexNet

  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. model = Sequential()
  10. model.add(Conv2D(96,(11,11),strides=(4,4),input_shape=(227,227,3),padding='valid',activation='relu',kernel_initializer='uniform'))
  11. model.add(MaxPooling2D(pool_size=(3,3),strides=(2,2)))
  12. model.add(Conv2D(256,(5,5),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))
  13. model.add(MaxPooling2D(pool_size=(3,3),strides=(2,2)))
  14. model.add(Conv2D(384,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))
  15. model.add(Conv2D(384,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))
  16. model.add(Conv2D(256,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))
  17. model.add(MaxPooling2D(pool_size=(3,3),strides=(2,2)))
  18. model.add(Flatten())
  19. model.add(Dense(4096,activation='relu'))
  20. model.add(Dropout(0.5))
  21. model.add(Dense(4096,activation='relu'))
  22. model.add(Dropout(0.5))
  23. model.add(Dense(1000,activation='softmax'))
  24. model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])
  25. model.summary()

ZFNet

  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. model = Sequential()
  10. model.add(Conv2D(96,(7,7),strides=(2,2),input_shape=(224,224,3),padding='valid',activation='relu',kernel_initializer='uniform'))
  11. model.add(MaxPooling2D(pool_size=(3,3),strides=(2,2)))
  12. model.add(Conv2D(256,(5,5),strides=(2,2),padding='same',activation='relu',kernel_initializer='uniform'))
  13. model.add(MaxPooling2D(pool_size=(3,3),strides=(2,2)))
  14. model.add(Conv2D(384,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))
  15. model.add(Conv2D(384,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))
  16. model.add(Conv2D(256,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))
  17. model.add(MaxPooling2D(pool_size=(3,3),strides=(2,2)))
  18. model.add(Flatten())
  19. model.add(Dense(4096,activation='relu'))
  20. model.add(Dropout(0.5))
  21. model.add(Dense(4096,activation='relu'))
  22. model.add(Dropout(0.5))
  23. model.add(Dense(1000,activation='softmax'))
  24. model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])
  25. model.summary()

VGG-13
  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. model = Sequential()
  9. model.add(Conv2D(64,(3,3),strides=(1,1),input_shape=(224,224,3),padding='same',activation='relu',kernel_initializer='uniform'))
  10. model.add(Conv2D(64,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))
  11. model.add(MaxPooling2D(pool_size=(2,2)))
  12. model.add(Conv2D(128,(3,2),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))
  13. model.add(Conv2D(128,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))
  14. model.add(MaxPooling2D(pool_size=(2,2)))
  15. model.add(Conv2D(256,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))
  16. model.add(Conv2D(256,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))
  17. model.add(MaxPooling2D(pool_size=(2,2)))
  18. model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))
  19. model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))
  20. model.add(MaxPooling2D(pool_size=(2,2)))
  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(Flatten())
  25. model.add(Dense(4096,activation='relu'))
  26. model.add(Dropout(0.5))
  27. model.add(Dense(4096,activation='relu'))
  28. model.add(Dropout(0.5))
  29. model.add(Dense(1000,activation='softmax'))
  30. model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])
  31. model.summary()

VGG-16
  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. model = Sequential()
  9. model.add(Conv2D(64,(3,3),strides=(1,1),input_shape=(224,224,3),padding='same',activation='relu',kernel_initializer='uniform'))
  10. model.add(Conv2D(64,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))
  11. model.add(MaxPooling2D(pool_size=(2,2)))
  12. model.add(Conv2D(128,(3,2),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))
  13. model.add(Conv2D(128,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))
  14. model.add(MaxPooling2D(pool_size=(2,2)))
  15. model.add(Conv2D(256,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))
  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(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))
  22. model.add(MaxPooling2D(pool_size=(2,2)))
  23. model.add(Conv2D(512,(3,3),strides=(1,1),padding='same',activation='relu',kernel_initializer='uniform'))
  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(MaxPooling2D(pool_size=(2,2)))
  27. model.add(Flatten())
  28. model.add(Dense(4096,activation='relu'))
  29. model.add(Dropout(0.5))
  30. model.add(Dense(4096,activation='relu'))
  31. model.add(Dropout(0.5))
  32. model.add(Dense(1000,activation='softmax'))
  33. model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])
  34. model.summary()

GoogleNet
  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. def Conv2d_BN(x, nb_filter,kernel_size, padding='same',strides=(1,1),name=None):
  9. if name is not None:
  10. bn_name = name + '_bn'
  11. conv_name = name + '_conv'
  12. else:
  13. bn_name = None
  14. conv_name = None
  15. x = Conv2D(nb_filter,kernel_size,padding=padding,strides=strides,activation='relu',name=conv_name)(x)
  16. x = BatchNormalization(axis=3,name=bn_name)(x)
  17. return x
  18. def Inception(x,nb_filter):
  19. branch1x1 = Conv2d_BN(x,nb_filter,(1,1), padding='same',strides=(1,1),name=None)
  20. branch3x3 = Conv2d_BN(x,nb_filter,(1,1), padding='same',strides=(1,1),name=None)
  21. branch3x3 = Conv2d_BN(branch3x3,nb_filter,(3,3), padding='same',strides=(1,1),name=None)
  22. branch5x5 = Conv2d_BN(x,nb_filter,(1,1), padding='same',strides=(1,1),name=None)
  23. branch5x5 = Conv2d_BN(branch5x5,nb_filter,(1,1), padding='same',strides=(1,1),name=None)
  24. branchpool = MaxPooling2D(pool_size=(3,3),strides=(1,1),padding='same')(x)
  25. branchpool = Conv2d_BN(branchpool,nb_filter,(1,1),padding='same',strides=(1,1),name=None)
  26. x = concatenate([branch1x1,branch3x3,branch5x5,branchpool],axis=3)
  27. return x
  28. inpt = Input(shape=(224,224,3))
  29. #padding = 'same',填充为(步长-1)/2,还可以用ZeroPadding2D((3,3))
  30. x = Conv2d_BN(inpt,64,(7,7),strides=(2,2),padding='same')
  31. x = MaxPooling2D(pool_size=(3,3),strides=(2,2),padding='same')(x)
  32. x = Conv2d_BN(x,192,(3,3),strides=(1,1),padding='same')
  33. x = MaxPooling2D(pool_size=(3,3),strides=(2,2),padding='same')(x)
  34. x = Inception(x,64)#256
  35. x = Inception(x,120)#480
  36. x = MaxPooling2D(pool_size=(3,3),strides=(2,2),padding='same')(x)
  37. x = Inception(x,128)#512
  38. x = Inception(x,128)
  39. x = Inception(x,128)
  40. x = Inception(x,132)#528
  41. x = Inception(x,208)#832
  42. x = MaxPooling2D(pool_size=(3,3),strides=(2,2),padding='same')(x)
  43. x = Inception(x,208)
  44. x = Inception(x,256)#1024
  45. x = AveragePooling2D(pool_size=(7,7),strides=(7,7),padding='same')(x)
  46. x = Dropout(0.4)(x)
  47. x = Dense(1000,activation='relu')(x)
  48. x = Dense(1000,activation='softmax')(x)
  49. model = Model(inpt,x,name='inception')
  50. model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])
  51. model.summary()

Resnet-34
  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. def Conv2d_BN(x, nb_filter,kernel_size, strides=(1,1), padding='same',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. x = Conv2D(nb_filter,kernel_size,padding=padding,strides=strides,activation='relu',name=conv_name)(x)
  17. x = BatchNormalization(axis=3,name=bn_name)(x)
  18. return x
  19. def Conv_Block(inpt,nb_filter,kernel_size,strides=(1,1), with_conv_shortcut=False):
  20. x = Conv2d_BN(inpt,nb_filter=nb_filter,kernel_size=kernel_size,strides=strides,padding='same')
  21. x = Conv2d_BN(x, nb_filter=nb_filter, kernel_size=kernel_size,padding='same')
  22. if with_conv_shortcut:
  23. shortcut = Conv2d_BN(inpt,nb_filter=nb_filter,strides=strides,kernel_size=kernel_size)
  24. x = add([x,shortcut])
  25. return x
  26. else:
  27. x = add([x,inpt])
  28. return x
  29. inpt = Input(shape=(224,224,3))
  30. x = ZeroPadding2D((3,3))(inpt)
  31. x = Conv2d_BN(x,nb_filter=64,kernel_size=(7,7),strides=(2,2),padding='valid')
  32. x = MaxPooling2D(pool_size=(3,3),strides=(2,2),padding='same')(x)
  33. #(56,56,64)
  34. x = Conv_Block(x,nb_filter=64,kernel_size=(3,3))
  35. x = Conv_Block(x,nb_filter=64,kernel_size=(3,3))
  36. x = Conv_Block(x,nb_filter=64,kernel_size=(3,3))
  37. #(28,28,128)
  38. x = Conv_Block(x,nb_filter=128,kernel_size=(3,3),strides=(2,2),with_conv_shortcut=True)
  39. x = Conv_Block(x,nb_filter=128,kernel_size=(3,3))
  40. x = Conv_Block(x,nb_filter=128,kernel_size=(3,3))
  41. x = Conv_Block(x,nb_filter=128,kernel_size=(3,3))
  42. #(14,14,256)
  43. x = Conv_Block(x,nb_filter=256,kernel_size=(3,3),strides=(2,2),with_conv_shortcut=True)
  44. x = Conv_Block(x,nb_filter=256,kernel_size=(3,3))
  45. x = Conv_Block(x,nb_filter=256,kernel_size=(3,3))
  46. x = Conv_Block(x,nb_filter=256,kernel_size=(3,3))
  47. x = Conv_Block(x,nb_filter=256,kernel_size=(3,3))
  48. x = Conv_Block(x,nb_filter=256,kernel_size=(3,3))
  49. #(7,7,512)
  50. x = Conv_Block(x,nb_filter=512,kernel_size=(3,3),strides=(2,2),with_conv_shortcut=True)
  51. x = Conv_Block(x,nb_filter=512,kernel_size=(3,3))
  52. x = Conv_Block(x,nb_filter=512,kernel_size=(3,3))
  53. x = AveragePooling2D(pool_size=(7,7))(x)
  54. x = Flatten()(x)
  55. x = Dense(1000,activation='softmax')(x)
  56. model = Model(inputs=inpt,outputs=x)
  57. model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])
  58. model.summary()

Resnet-50
  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. 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. 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. def Conv_Block(inpt,nb_filter,kernel_size,strides=(1,1), with_conv_shortcut=False):
  21. x = Conv2d_BN(inpt,nb_filter=nb_filter[0],kernel_size=(1,1),strides=strides,padding='same')
  22. x = Conv2d_BN(x, nb_filter=nb_filter[1], kernel_size=(3,3), padding='same')
  23. x = Conv2d_BN(x, nb_filter=nb_filter[2], kernel_size=(1,1), padding='same')
  24. if with_conv_shortcut:
  25. shortcut = Conv2d_BN(inpt,nb_filter=nb_filter[2],strides=strides,kernel_size=kernel_size)
  26. x = add([x,shortcut])
  27. return x
  28. else:
  29. x = add([x,inpt])
  30. return x
  31. inpt = Input(shape=(224,224,3))
  32. x = ZeroPadding2D((3,3))(inpt)
  33. x = Conv2d_BN(x,nb_filter=64,kernel_size=(7,7),strides=(2,2),padding='valid')
  34. x = MaxPooling2D(pool_size=(3,3),strides=(2,2),padding='same')(x)
  35. x = Conv_Block(x,nb_filter=[64,64,256],kernel_size=(3,3),strides=(1,1),with_conv_shortcut=True)
  36. x = Conv_Block(x,nb_filter=[64,64,256],kernel_size=(3,3))
  37. x = Conv_Block(x,nb_filter=[64,64,256],kernel_size=(3,3))
  38. x = Conv_Block(x,nb_filter=[128,128,512],kernel_size=(3,3),strides=(2,2),with_conv_shortcut=True)
  39. x = Conv_Block(x,nb_filter=[128,128,512],kernel_size=(3,3))
  40. x = Conv_Block(x,nb_filter=[128,128,512],kernel_size=(3,3))
  41. x = Conv_Block(x,nb_filter=[128,128,512],kernel_size=(3,3))
  42. x = Conv_Block(x,nb_filter=[256,256,1024],kernel_size=(3,3),strides=(2,2),with_conv_shortcut=True)
  43. x = Conv_Block(x,nb_filter=[256,256,1024],kernel_size=(3,3))
  44. x = Conv_Block(x,nb_filter=[256,256,1024],kernel_size=(3,3))
  45. x = Conv_Block(x,nb_filter=[256,256,1024],kernel_size=(3,3))
  46. x = Conv_Block(x,nb_filter=[256,256,1024],kernel_size=(3,3))
  47. x = Conv_Block(x,nb_filter=[256,256,1024],kernel_size=(3,3))
  48. x = Conv_Block(x,nb_filter=[512,512,2048],kernel_size=(3,3),strides=(2,2),with_conv_shortcut=True)
  49. x = Conv_Block(x,nb_filter=[512,512,2048],kernel_size=(3,3))
  50. x = Conv_Block(x,nb_filter=[512,512,2048],kernel_size=(3,3))
  51. x = AveragePooling2D(pool_size=(7,7))(x)
  52. x = Flatten()(x)
  53. x = Dense(1000,activation='softmax')(x)
  54. model = Model(inputs=inpt,outputs=x)
  55. sgd = SGD(decay=0.0001,momentum=0.9)
  56. model.compile(loss='categorical_crossentropy',optimizer=sgd,metrics=['accuracy'])
  57. model.summary()



10-06 17:08