ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:20.32KB ,
资源ID:4347000      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4347000.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(如何用卷积神经网络CNN识别手写数字集.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

如何用卷积神经网络CNN识别手写数字集.docx

1、如何用卷积神经网络CNN识别手写数字集如何用卷积神经网络CNN识别手写数字集?前几天用CNN识别手写数字集,后来看到kaggle上有一个比赛是识别手写数字集的,已经进行了一年多了,目前有1179个有效提交,最高的是100%,我做了一下,用keras做的,一开始用最简单的MLP,准确率只有98.19%,然后不断改进,现在是99.78%,然而我看到排名第一是100%,心碎 = =,于是又改进了一版,现在把最好的结果记录一下,如果提升了再来更新。手写数字集相信大家应该很熟悉了,这个程序相当于学一门新语言的“Hello World”,或者mapreduce的“WordCount”:)这里就不多做介绍了

2、,简单给大家看一下:复制代码 1 # Author:Charlotte 2 # Plot mnist dataset 3 from keras.datasets import mnist 4 import matplotlib.pyplot as plt 5 # load the MNIST dataset 6 (X_train, y_train), (X_test, y_test) = mnist.load_data() 7 # plot 4 images as gray scale 8 plt.subplot(221) 9 plt.imshow(X_train0, cmap=plt.get

3、_cmap(PuBuGn_r)10 plt.subplot(222)11 plt.imshow(X_train1, cmap=plt.get_cmap(PuBuGn_r)12 plt.subplot(223)13 plt.imshow(X_train2, cmap=plt.get_cmap(PuBuGn_r)14 plt.subplot(224)15 plt.imshow(X_train3, cmap=plt.get_cmap(PuBuGn_r)16 # show the plot17 plt.show()复制代码图: 1.BaseLine版本一开始我没有想过用CNN做,因为比较耗时,所以想看

4、看直接用比较简单的算法看能不能得到很好的效果。之前用过机器学习算法跑过一遍,最好的效果是SVM,96.8%(默认参数,未调优),所以这次准备用神经网络做。BaseLine版本用的是MultiLayer Percepton(多层感知机)。这个网络结构比较简单,输入-隐含-输出。隐含层采用的rectifier linear unit,输出直接选取的softmax进行多分类。网络结构:代码:复制代码 1 # coding:utf-8 2 # Baseline MLP for MNIST dataset 3 import numpy 4 from keras.datasets import mnist

5、 5 from keras.models import Sequential 6 from keras.layers import Dense 7 from keras.layers import Dropout 8 from keras.utils import np_utils 9 10 seed = 711 numpy.random.seed(seed)12 #加载数据13 (X_train, y_train), (X_test, y_test) = mnist.load_data()14 15 num_pixels = X_train.shape1 * X_train.shape216

6、 X_train = X_train.reshape(X_train.shape0, num_pixels).astype(float32)17 X_test = X_test.reshape(X_test.shape0, num_pixels).astype(float32)18 19 X_train = X_train / 25520 X_test = X_test / 25521 22 # 对输出进行one hot编码23 y_train = np_utils.to_categorical(y_train)24 y_test = np_utils.to_categorical(y_tes

7、t)25 num_classes = y_test.shape126 27 # MLP模型28 def baseline_model():29 model = Sequential()30 model.add(Dense(num_pixels, input_dim=num_pixels, init=normal, activation=relu)31 model.add(Dense(num_classes, init=normal, activation=softmax)32 model.summary()33 pile(loss=categorical_crossentropy, optim

8、izer=adam, metrics=accuracy)34 return model35 36 # 建立模型37 model = baseline_model()38 39 # Fit40 model.fit(X_train, y_train, validation_data=(X_test, y_test), nb_epoch=10, batch_size=200, verbose=2)41 42 #Evaluation43 scores = model.evaluate(X_test, y_test, verbose=0)44 print(Baseline Error: %.2f% %

9、(100-scores1*100)#输出错误率复制代码结果:复制代码 1 Layer (type) Output Shape Param # Connected to 2 = 3 dense_1 (Dense) (None, 784) 615440 dense_input_100 4 _ 5 dense_2 (Dense) (None, 10) 7850 dense_100 6 = 7 Total params: 623290 8 _ 9 Train on 60000 samples, validate on 10000 samples10 Epoch 1/1011 3s - loss: 0.

10、2791 - acc: 0.9203 - val_loss: 0.1420 - val_acc: 0.957912 Epoch 2/1013 3s - loss: 0.1122 - acc: 0.9679 - val_loss: 0.0992 - val_acc: 0.969914 Epoch 3/1015 3s - loss: 0.0724 - acc: 0.9790 - val_loss: 0.0784 - val_acc: 0.974516 Epoch 4/1017 3s - loss: 0.0509 - acc: 0.9853 - val_loss: 0.0774 - val_acc:

11、 0.977318 Epoch 5/1019 3s - loss: 0.0366 - acc: 0.9898 - val_loss: 0.0626 - val_acc: 0.979420 Epoch 6/1021 3s - loss: 0.0265 - acc: 0.9930 - val_loss: 0.0639 - val_acc: 0.979722 Epoch 7/1023 3s - loss: 0.0185 - acc: 0.9956 - val_loss: 0.0611 - val_acc: 0.981124 Epoch 8/1025 3s - loss: 0.0150 - acc:

12、0.9967 - val_loss: 0.0616 - val_acc: 0.981626 Epoch 9/1027 4s - loss: 0.0107 - acc: 0.9980 - val_loss: 0.0604 - val_acc: 0.982128 Epoch 10/1029 4s - loss: 0.0073 - acc: 0.9988 - val_loss: 0.0611 - val_acc: 0.981930 Baseline Error: 1.81%复制代码可以看到结果还是不错的,正确率98.19%,错误率只有1.81%,而且只迭代十次效果也不错。这个时候我还是没想到去用CN

13、N,而是想如果迭代100次,会不会效果好一点?于是我迭代了100次,结果如下:Epoch 100/1008s - loss: 4.6181e-07 - acc: 1.0000 - val_loss: 0.0982 - val_acc: 0.9854Baseline Error: 1.46%从结果中可以看出,迭代100次也只提高了0.35%,没有突破99%,所以就考虑用CNN来做。 2.简单的CNN网络keras的CNN模块还是很全的,由于这里着重讲CNN的结果,对于CNN的基本知识就不展开讲了。网络结构:代码:复制代码 1 #coding: utf-8 2 #Simple CNN 3 impo

14、rt numpy 4 from keras.datasets import mnist 5 from keras.models import Sequential 6 from keras.layers import Dense 7 from keras.layers import Dropout 8 from keras.layers import Flatten 9 from keras.layers.convolutional import Convolution2D10 from keras.layers.convolutional import MaxPooling2D11 from

15、 keras.utils import np_utils12 13 seed = 714 numpy.random.seed(seed)15 16 #加载数据17 (X_train, y_train), (X_test, y_test) = mnist.load_data()18 # reshape to be sampleschannelswidthheight19 X_train = X_train.reshape(X_train.shape0, 1, 28, 28).astype(float32)20 X_test = X_test.reshape(X_test.shape0, 1, 2

16、8, 28).astype(float32)21 22 # normalize inputs from 0-255 to 0-123 X_train = X_train / 25524 X_test = X_test / 25525 26 # one hot encode outputs27 y_train = np_utils.to_categorical(y_train)28 y_test = np_utils.to_categorical(y_test)29 num_classes = y_test.shape130 31 # define a simple CNN model32 de

17、f baseline_model():33 # create model34 model = Sequential()35 model.add(Convolution2D(32, 5, 5, border_mode=valid, input_shape=(1, 28, 28), activation=relu)36 model.add(MaxPooling2D(pool_size=(2, 2)37 model.add(Dropout(0.2)38 model.add(Flatten()39 model.add(Dense(128, activation=relu)40 model.add(De

18、nse(num_classes, activation=softmax)41 # Compile model42 pile(loss=categorical_crossentropy, optimizer=adam, metrics=accuracy)43 return model44 45 # build the model46 model = baseline_model()47 48 # Fit the model49 model.fit(X_train, y_train, validation_data=(X_test, y_test), nb_epoch=10, batch_size

19、=128, verbose=2)50 51 # Final evaluation of the model52 scores = model.evaluate(X_test, y_test, verbose=0)53 print(CNN Error: %.2f% % (100-scores1*100)复制代码结果:复制代码 1 _ 2 Layer (type) Output Shape Param # Connected to 3 = 4 convolution2d_1 (Convolution2D) (None, 32, 24, 24) 832 convolution2d_input_100

20、 5 _ 6 maxpooling2d_1 (MaxPooling2D) (None, 32, 12, 12) 0 convolution2d_100 7 _ 8 dropout_1 (Dropout) (None, 32, 12, 12) 0 maxpooling2d_100 9 _10 flatten_1 (Flatten) (None, 4608) 0 dropout_10011 _12 dense_1 (Dense) (None, 128) 589952 flatten_10013 _14 dense_2 (Dense) (None, 10) 1290 dense_10015 =16

21、Total params: 59207417 _18 Train on 60000 samples, validate on 10000 samples19 Epoch 1/1020 32s - loss: 0.2412 - acc: 0.9318 - val_loss: 0.0754 - val_acc: 0.976621 Epoch 2/1022 32s - loss: 0.0726 - acc: 0.9781 - val_loss: 0.0534 - val_acc: 0.982923 Epoch 3/1024 32s - loss: 0.0497 - acc: 0.9852 - val

22、_loss: 0.0391 - val_acc: 0.985825 Epoch 4/1026 32s - loss: 0.0413 - acc: 0.9870 - val_loss: 0.0432 - val_acc: 0.985427 Epoch 5/1028 34s - loss: 0.0323 - acc: 0.9897 - val_loss: 0.0375 - val_acc: 0.986929 Epoch 6/1030 36s - loss: 0.0281 - acc: 0.9909 - val_loss: 0.0424 - val_acc: 0.986431 Epoch 7/103

23、2 36s - loss: 0.0223 - acc: 0.9930 - val_loss: 0.0328 - val_acc: 0.989333 Epoch 8/1034 36s - loss: 0.0198 - acc: 0.9939 - val_loss: 0.0381 - val_acc: 0.988035 Epoch 9/1036 36s - loss: 0.0156 - acc: 0.9954 - val_loss: 0.0347 - val_acc: 0.988437 Epoch 10/1038 36s - loss: 0.0141 - acc: 0.9955 - val_los

24、s: 0.0318 - val_acc: 0.989339 CNN Error: 1.07%复制代码迭代的结果中,loss和acc为训练集的结果,val_loss和val_acc为验证机的结果。从结果上来看,效果不错,比100次迭代的MLP(1.46%)提升了0.39%,CNN的误差率为1.07%。这里的CNN的网络结构还是比较简单的,如果把CNN的结果再加几层,边复杂一代,结果是否还能提升? 3.Larger CNN这一次我加了几层卷积层,代码:复制代码 1 # Larger CNN 2 import numpy 3 from keras.datasets import mnist 4 fr

25、om keras.models import Sequential 5 from keras.layers import Dense 6 from keras.layers import Dropout 7 from keras.layers import Flatten 8 from keras.layers.convolutional import Convolution2D 9 from keras.layers.convolutional import MaxPooling2D10 from keras.utils import np_utils1112 seed = 713 nump

26、y.random.seed(seed)14 # load data15 (X_train, y_train), (X_test, y_test) = mnist.load_data()16 # reshape to be samplespixelswidthheight17 X_train = X_train.reshape(X_train.shape0, 1, 28, 28).astype(float32)18 X_test = X_test.reshape(X_test.shape0, 1, 28, 28).astype(float32)19 # normalize inputs from 0-255 to 0-120 X_train = X_train / 25521 X_test = X_test / 25522 # one hot encode outputs23 y_train = np_utils.to_categorical(y_train)24 y_test = np_utils.to_categorical(y_test)25 num_classes = y_tes

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1