Digit Recognizer比赛Top6%
来源:互联网 发布:网站seo方案 编辑:程序博客网 时间:2024/06/05 00:19
Learn computer vision fundamentals with the famous MNIST data
基于keras + tensorflow
分别采用VGG和Resnet网络实现预测,效果分别是0.99300和0.99614
直接上代码
#coding=utf-8from pandas import read_csvimport numpy as npfrom keras.models import Sequential,Modelfrom keras.layers import Dense,Dropout,BatchNormalization,Flatten,add,Inputfrom keras.layers.convolutional import Conv2D,MaxPooling2D,AveragePooling2Dfrom keras.utils.np_utils import to_categoricalfrom keras.optimizers import SGDfrom keras.callbacks import ModelCheckpointfrom keras.preprocessing.image import ImageDataGeneratorfrom sklearn.model_selection import train_test_splitimport matplotlib.pyplot as pltimport cPickleimport gzip#使用Resnet网络迭代6次准确率达0.99614,使用VGG网络准确率为0.99300data = gzip.open(r'/media/wmy/document/BigData/kaggle/Digit Recognizer/mnist.pkl.gz')train_set,valid_set,test_set = cPickle.load(data)train_data = np.concatenate([train_set[0],valid_set[0],test_set[0]])train_label = np.concatenate([train_set[1],valid_set[1],test_set[1]])train = read_csv(r'/media/wmy/document/BigData/kaggle/Digit Recognizer/train.csv',header=None,delimiter=',')test = read_csv(r'/media/wmy/document/BigData/kaggle/Digit Recognizer/test.csv',header=None,delimiter=',')train = train.valuestrain_x = np.concatenate((train[:,1:],train_data))train_y = np.concatenate((train[:,0],train_label))train_x = train_x.reshape((-1,28,28,1))/255.train_y = to_categorical(train_y)print train_x.shapeprint train_y.shapetest = test.valuestest_x = test[:,:].reshape((-1,28,28,1))/255.seed = 7np.random.seed(seed=seed)def CNN_Model_1(): model = Sequential() model.add(Conv2D(64, (3, 3), input_shape=(28, 28, 1), activation='relu', padding='same')) model.add(BatchNormalization()) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Conv2D(96, (3, 3), activation='relu', padding='same')) model.add(BatchNormalization()) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Conv2D(96, (2, 2), activation='relu', padding='valid')) model.add(BatchNormalization()) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Flatten()) model.add(Dense(100, activation='relu')) model.add(BatchNormalization()) model.add(Dropout(0.5)) model.add(Dense(100, activation='relu')) model.add(BatchNormalization()) model.add(Dropout(0.5)) model.add(Dense(10, activation='softmax')) sgd = SGD(lr=0.001, momentum=0.9) model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy']) model.summary() return modeldef VGG(): model = Sequential() model.add(Conv2D(64, (3, 3), input_shape=(28, 28, 1), activation='relu', padding='same')) model.add(BatchNormalization()) model.add(Conv2D(64, (3, 3), activation='relu', padding='same')) model.add(BatchNormalization()) model.add(Conv2D(64, (3, 3), activation='relu', padding='same')) model.add(BatchNormalization()) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Conv2D(128, (3, 3), activation='relu', padding='same')) model.add(BatchNormalization()) model.add(Conv2D(128, (3, 3), activation='relu', padding='same')) model.add(BatchNormalization()) model.add(Conv2D(128, (3, 3), activation='relu', padding='same')) model.add(BatchNormalization()) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Conv2D(256, (2, 2), activation='relu', padding='same')) model.add(BatchNormalization()) model.add(Conv2D(256, (2, 2), activation='relu', padding='same')) model.add(BatchNormalization()) model.add(Conv2D(256, (2, 2), activation='relu', padding='same')) model.add(BatchNormalization()) model.add(AveragePooling2D(pool_size=(7, 7))) model.add(Flatten()) model.add(Dense(10, activation='softmax')) sgd = SGD(lr=0.001, momentum=0.9) model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy']) model.summary() return modeldef Conv2d_BN(x, nb_filter,kernel_size, strides=(1,1), padding='same'): x = Conv2D(nb_filter,kernel_size,padding=padding,strides=strides,activation='relu')(x) x = BatchNormalization(axis=3)(x) return xdef Conv_Block(inpt,nb_filter,kernel_size,strides=(1,1), with_conv_shortcut=False): x = Conv2d_BN(inpt, nb_filter=nb_filter, kernel_size=kernel_size, strides=strides, padding='same') x = Conv2d_BN(x, nb_filter=nb_filter, kernel_size=kernel_size, padding='same') if with_conv_shortcut: shortcut = Conv2d_BN(inpt, nb_filter=nb_filter, strides=strides, kernel_size=kernel_size) x = add([x, shortcut]) return x else: x = add([x, inpt]) return xdef Resnet(): inpt = Input(shape=(28, 28, 1)) x = Conv2d_BN(inpt, nb_filter=64, kernel_size=(3, 3)) x = Conv_Block(x, nb_filter=64, kernel_size=(3, 3)) x = Conv_Block(x, nb_filter=64, kernel_size=(3, 3)) x = Conv_Block(x, nb_filter=64, kernel_size=(3, 3)) x = Conv_Block(x, nb_filter=128, kernel_size=(3, 3), strides=(1, 1), with_conv_shortcut=True) x = Conv_Block(x, nb_filter=128, kernel_size=(3, 3)) x = Conv_Block(x, nb_filter=128, kernel_size=(3, 3)) x = Conv_Block(x, nb_filter=128, kernel_size=(3, 3)) x = Conv_Block(x, nb_filter=256, kernel_size=(3, 3), strides=(2, 2), with_conv_shortcut=True) x = Conv_Block(x, nb_filter=256, kernel_size=(3, 3)) x = Conv_Block(x, nb_filter=256, kernel_size=(3, 3)) x = Conv_Block(x, nb_filter=256, kernel_size=(3, 3)) x = Conv_Block(x, nb_filter=256, kernel_size=(3, 3)) x = Conv_Block(x, nb_filter=256, kernel_size=(3, 3)) x = Conv_Block(x, nb_filter=512, kernel_size=(3, 3), strides=(2, 2), with_conv_shortcut=True) x = Conv_Block(x, nb_filter=512, kernel_size=(3, 3)) x = Conv_Block(x, nb_filter=512, kernel_size=(3, 3)) x = AveragePooling2D(pool_size=(7, 7))(x) x = Flatten()(x) x = Dense(10, activation='softmax')(x) model = Model(inpt,x) sgd = SGD(lr=0.001, momentum=0.9) model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy']) model.summary() return modelcallback = []model_check = ModelCheckpoint(filepath='best_params.h5',monitor='val_acc',save_best_only=True,mode='max')callback.append(model_check)#model = VGG()model = Resnet()'''datagen = ImageDataGenerator( featurewise_center=True, samplewise_center=True, featurewise_std_normalization=True, samplewise_std_normalization=True, zca_whitening=False, rotation_range=10., width_shift_range=.2, height_shift_range=.2, rescale=None, )datagen.fit(train_x)''''''model.fit_generator( datagen.flow(train_x,train_y,batch_size=20), steps_per_epoch=train_x.shape[0], epochs=30, verbose=2, validation_data=(valid_x,valid_y))'''#model.fit(train_x,train_y,validation_split=0.1,epochs=50,batch_size=20,verbose=2,callbacks=callback)model.load_weights('best_params.h5')#yPred = model.predict_classes(test_x,batch_size=20,verbose=2)yPred = model.predict(test_x,batch_size=20,verbose=2)yPred = np.argmax(yPred,axis=1)np.savetxt('wmy_pred.csv', np.c_[range(1,len(yPred)+1),yPred], delimiter=',', header = 'ImageId,Label', comments = '', fmt='%d')
0 0
- Digit Recognizer比赛Top6%
- Digit Recognizer (Kaggle)
- Kaggle | Digit Recognizer
- Kaggle入门:Digit Recognizer
- Digit Recognizer by LightGBM
- Kaggle入门:Digit Recognizer
- kaggle | Digit Recognizer
- Kaggle—Digit Recognizer竞赛
- Digit Recognizer Kaggle 竞赛系列
- kaggle | Digit recognizer with caffe
- Kaggle digit-recognizer PCA+SVM
- kaggle——Digit Recognizer
- kaggle Digit Recognizer 数字识别
- 关于kaggle上的digit recognizer
- DeepLearning to digit recognizer in kaggle
- 机器学习-Kaggle竞赛-Digit recognizer
- 【Kaggle练习赛】之Digit Recognizer
- 第一个kaggle项目Digit Recognizer
- Jenkins进阶系列之——07更改Jenkins的主目录
- [分布式监控CAT] Client端源码解析
- appium for window 环境搭建
- MYSQL建表时PK,NN,UQ,BIN,UN,ZF,AI字段标识的意义
- linux下常用命令总结(文件和目录)
- Digit Recognizer比赛Top6%
- IE中不能不知的5条秘籍
- json解析
- N秒后跳转页面
- Android Studio AIDL创建案例(解决自动生成java问题)
- 初试redis集群
- poj3061 Subsequence(尺取法)
- Lua 数组
- 深度学习算法的几个难点