使用keras实现手写数字识别代码学习笔记
import keras
from keras
import layers
import matplotlib.pyplot as plt
%matplotlib inline
import keras.datasets.mnist as mnist
(train_image,train_label),(test_image,test_label) = mnist.load_data() #下载国外手写数字数据集
train_image.shape # 打印训练图像的状态(输出六万张图片,而且每张图片是28*28的灰度图片)
plt.imshow(train_image[0]) #画出训练集中的第一张图片
train_label
train_label[1000]
test_image.shape,test_label.shape #查看测试集中图片的相关信息
model = keras.Sequential() #添加一个模型(该模型中支持cnn,rnn等)
model.add(layers.Flatten()) #第一层展平,变成60000个,28*28
model.add(layers.Dense(64,activation = 'relu')) # 全连接层,中间输出一个64位的隐藏层,而且采用'relu'作为激活函数
model.add(layers.Dense(10,activation = 'softmax')) # 添加一个输出层,并且采用softmax函数作为激活函数(需要输出概率)
#编译,optimizer='adam'表示使用adam梯度下降算法
#loss = 'sparse_categorical_crossentropy'表示使用sparse_categorical_crossentropy损失函数计算交叉熵
#metrics = ['acc'] 表示使用acc指标进行计算混合矩阵的值(做为评估值)
model.compile(optimizer = 'adam',loss = 'sparse_categorical_crossentropy',metrics = ['acc'])
#训练 ,epochs表示每张图片训练的次数,batch_size 表示每次先训练512张图片,防止内存爆炸
model.fit(train_image,train_label,epochs = 50,batch_size = 512)
model.evaluate(test_image,test_label)#测试
import numpy as np
np.argmax(model.predict(test_image[:10]),axis = 1) # 通过argmax函数把预测的前十个元素输出
test_label[:10] #测试集中的前十个数
增加网络容量(隐藏层)以增加准确率
model = keras.Sequential() #添加一个模型(该模型中支持cnn,rnn等)
model.add(layers.Flatten()) #第一层展平,变成60000个,28*28
model.add(layers.Dense(64,activation = 'relu')) # 全连接层,中间输出一个64位的隐藏层,而且采用'relu'作为激活函数
model.add(layers.Dense(64,activation = 'relu')) # 全连接层,中间输出一个64位的隐藏层,而且采用'relu'作为激活函数
model.add(layers.Dense(64,activation = 'relu')) # 全连接层,中间输出一个64位的隐藏层,而且采用'relu'作为激活函数
model.add(layers.Dense(10,activation = 'softmax')) # 添加一个输出层,并且采用softmax函数作为激活函数(需要输出概率)
#loss = 'sparse_categorical_crossentropy'表示使用sparse_categorical_crossentropy损失函数计算交叉熵
#metrics = ['acc'] 表示使用acc指标进行计算混合矩阵的值(做为评估值)
model.compile(optimizer = 'adam',loss = 'sparse_categorical_crossentropy',metrics = ['acc'])
model.fit(train_image,train_label,epochs = 50,batch_size = 512,validation_data = (test_image,test_label))
model.evaluate(test_image,test_label)
model.evaluate(train_image,train_label)
注:学习日月光华老师视频后个人做的笔记,代码可以成功运行