Kaggle Digit Recognizer使用keras实现手写数字识别 A1

来源:互联网 发布:淘宝靠谱的阿迪代购 编辑:程序博客网 时间:2024/05/03 04:23

1、Kaggle的Digit Recognizer竞赛
地址:https://www.kaggle.com/c/digit-recognizer
自己获取数据集train.csv和test.csv:https://www.kaggle.com/c/digit-recognizer/data

2、可以使用ipython notebook交互式变成环境进行,也可以使用其他python环境。这里使用的是ipython notebook,注意数据集的文件路径。使用深度学习框架keras实现手写数字识别。
代码:

import pandas as pdimport numpy as npfrom keras.utils.np_utils import to_categoricalfrom keras import backend as K

运行,显示出Using Theano backend.
我这里使用的Theano作后端,也可使用Tensorflow作后端。更改方法参见keras官方教程或中文文档教程。

K.set_image_dim_ordering('th') #input shape: (channels, height, width)train_df = pd.read_csv("../input/train.csv")valid_df = pd.read_csv("../input/test.csv")x_train=train_df.drop(['label'],axis=1).values.astype('float32')Y_train = train_df['label'].valuesx_valid = valid_df.values.astype('float32')
g_height = 28, 28n_train = x_train.shape[0]n_valid = x_valid.shape[0]n_classes = 10x_train = x_train.reshape(n_train,1,img_width,img_height) x_valid = x_valid.reshape(n_valid,1,img_width,img_height) x_train = x_train/255 #normalize from [0,255] to [0,1] x_valid = x_valid/255

运行上述代码。

%matplotlib inlineimport matplotlib.pyplot as pltimgplot = plt.imshow(X_train[4,0,:,:,],cmap='gray_r')

运行上述代码,会输出显示:
这里写图片描述

from keras.utils import np_utils nb_classes = np.max(Y_train) + 1print nb_classesy_train = np_utils.to_categorical(Y_train, nb_classes)

运行上述代码。输出打印得到10。

from keras.models import Sequentialfrom keras.layers.convolutional import *from keras.layers.core import Dropout, Dense, Flatten, Activationn_filters = 64filter_size1 = 3filter_size2 = 2pool_size1 = 3pool_size2 = 1n_dense = 128model = Sequential()model.add(Convolution2D(n_filters, filter_size1, filter_size1, batch_input_shape=(Nomodel.add(MaxPooling2D(pool_size=(pool_size1, pool_size1)))model.add(Convolution2D(n_filters, filter_size2, filter_size2, activation='relu', bomodel.add(MaxPooling2D(pool_size=(pool_size2, pool_size2)))model.add(Dropout(0.25))model.add(Flatten())model.add(Dense(n_dense))model.add(Activation('relu'))model.add(Dropout(0.5))model.add(Dense(n_classes))model.add(Activation('softmax'))model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy']
batch_size = 128n_epochs = 1model.fit(x_train,          y_train,          batch_size=batch_size,          nb_epoch=n_epochs,verbose=2,          validation_split=.2)

Train on 33600 samples, validate on 8400 samples
Epoch 1/1
56s - loss: 0.4190 - acc: 0.8713 - val_loss: 0.0968 - val_acc: 0.9705
Out[31]:

yPred=model.predict_classes(x_valid,batch_size=32,verbose=1)np.savetxt('mnist_output.csv',np.c_[range(1,len(yPred)+1),yPred], delimiter=',', header = 'ImageId,Label', comments = '', fmt='%d')

28000/28000 [==============================] - 15s
得到提交文件mnist_output.csv,进入提交界面,https://www.kaggle.com/c/digit-recognizer/submit,将mnist_output.csv提交上去,得到score。

这里写图片描述
也可以看到自己的排名。

0 0
原创粉丝点击