1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Keras搭建CNN(手写数字识别Mnist)

Keras搭建CNN(手写数字识别Mnist)

时间:2021-06-22 00:07:01

相关推荐

Keras搭建CNN(手写数字识别Mnist)

MNIST数据集是手写数字识别通用的数据集,其中的数据是以二进制的形式保存的,每个数字是由28*28的矩阵表示的。

我们使用卷积神经网络对这些手写数字进行识别,步骤大致为:

导入库和模块

我们导入Sequential模型(相当于放积木的桌子)

from keras.models import Sequential

接下来,导入各种层(相当于形状各异的积木)

from keras.layers import Conv2D, MaxPool2Dfrom keras.layers import Dense, Flatten

加载数据集

Mnist数据集可以使用keras直接加载。

from keras.datasets import mnist(X_train, y_train), (X_test, y_test) = mnist.load_data()

查看数据集大小

print(X_train.shape)#(60000, 28, 28)

可以看出有60000个样本,每个样本是28*28像素的。

数据预处理

使用Keras是必须显式声明输入图像深度的尺寸。例如,具有所有3个RGB通道的全色图像的深度为3。

我们的MNIST图像的深度为1,但我们必须明确声明。

也就是说,我们希望将数据集从形状(n,rows,cols)转换为(n,rows,cols,channels)。

img_x, img_y = X_train.shape[1], X_train.shape[2]X_train = X_train.reshape(X_train.shape[0], img_x, img_y, 1)X_test = X_test.reshape(X_test.shape[0], img_x, img_y, 1)

除此之外,我们将数据标准化一下:

X_train = X_train.astype('float32')X_test = X_test.astype('float32')X_train /= 255X_test /= 255y_train = keras.utils.to_categorical(y_train, num_classes=10)y_test = keras.utils.to_categorical(y_test, num_classes=10)

构建网络

model = Sequential()model.add(Conv2D(32, kernel_size=(5,5), activation='relu', input_shape=(img_x, img_y, 1)))model.add(MaxPool2D(pool_size=(2,2), strides=(2,2)))model.add(Conv2D(64, kernel_size=(5,5), activation='relu'))model.add(MaxPool2D(pool_size=(2,2), strides=(2,2)))model.add(Flatten())model.add(Dense(1000, activation='relu'))model.add(Dense(10, activation='softmax'))

6. 编译

现在,只需要编译模型,就可以开始训练了。当编译模型时,我们声明了损失函数和优化器(SGD,Adam等)。

pile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

训练

接下来,我们传入训练集进行训练

model.fit(X_train, y_train, batch_size=128, epochs=10)

评估模型

最后,传入测试集对模型模型进行评估

score = model.evaluate(X_test, y_test)print('acc', score[1])# acc 0.9927

准确率达到99%以上。

完整代码如下:

from keras.models import Sequentialfrom keras.layers import Conv2D, MaxPool2Dfrom keras.layers import Dense, Flattenimport kerasfrom keras.datasets import mnist#加载数据(X_train, y_train), (X_test, y_test) = mnist.load_data()img_x, img_y = X_train.shape[1], X_train.shape[2]#数据预处理X_train = X_train.reshape(X_train.shape[0], img_x, img_y, 1)X_test = X_test.reshape(X_test.shape[0], img_x, img_y, 1)X_train = X_train.astype('float32')X_test = X_test.astype('float32')X_train /= 255X_test /= 255y_train = keras.utils.to_categorical(y_train, num_classes=10)y_test = keras.utils.to_categorical(y_test, num_classes=10)#构建模型model = Sequential()model.add(Conv2D(32, kernel_size=(5,5), activation='relu', input_shape=(img_x, img_y, 1)))model.add(MaxPool2D(pool_size=(2,2), strides=(2,2)))model.add(Conv2D(64, kernel_size=(5,5), activation='relu'))model.add(MaxPool2D(pool_size=(2,2), strides=(2,2)))model.add(Flatten())model.add(Dense(1000, activation='relu'))model.add(Dense(10, activation='softmax'))#模型编译pile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])#训练model.fit(X_train, y_train, batch_size=128, epochs=10)#评估模型score = model.evaluate(X_test, y_test)print('acc', score[1])

原文地址:/p/53790130

非常好一篇keras入门文章(有很多例子):https://xiaosheng.me//07/04/article77/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。