keras手写数字识别笔记

阅读: 评论:0

keras手写数字识别笔记

keras手写数字识别笔记

keras手写数字识别

手写数字识别,可以说是机器学习领域的“hello world”。
对于初学者来说,这可能是一个很好的案例。程序是在jupyter上面跑的,所以有很多中间结果,参考书目是《Python深度学习》。

import keras
from keras.datasets import mnist
import matplotlib.pyplot as plt
import numpy as np

Using TensorFlow backend.

#获取mnist数据集(如果本地没有,会连网下载)
#训练集image格式(60000,28,28)
#训练集label格式(60000,)
#测试集image格式(10000,28,28)
#测试集label格式(10000,)
(train_img,train_label),(test_img,test_label)=mnist.load_data()
#拷贝一份测试数据以备后续预测
test_predict=py()
#分离训练集和验证集
val_img=train_img[:30000]
train_img=train_img[30000:]
val_label=train_label[:30000]
train_label=train_label[30000:]
#将图片展平+归一化(0~1)
train_img=shape((-1,28*28)).astype('float64')
train_img=train_img/255
#验证集
val_img=shape((-1,28*28)).astype('float64')
val_img=val_img/255test_img=shape((10000,28*28)).astype('float64')
test_img=test_img/255
#标签one-hot表示
train_label=_categorical(train_label)
val_label=_categorical(val_label) #验证集的标签
test_label=_categorical(test_label)
#显示一张手写数字
plt.imshow(test_predict[0])

#搭建网络
#全连接(relu)+全连接(softmax)
net&#dels.Sequential()
net.add(keras.layers.Dense(512,activation='relu',input_shape=(28*28,)))
net.add(keras.layers.Dense(10,activation='softmax'))
#定义优化器和损失函数
netpile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])
#fit训练+验证,最终结果保存到his
his=net.fit(train_img,train_label,batch_size=128,epochs=10,validation_data=(val_img,val_label))

Train on 30000 samples, validate on 30000 samples
Epoch 1/10
30000/30000 [] - 5s 157us/step - loss: 0.3495 - acc: 0.8992 - val_loss: 0.2031 - val_acc: 0.9410
Epoch 2/10
30000/30000 [
] - 4s 131us/step - loss: 0.1550 - acc: 0.9543 - val_loss: 0.1517 - val_acc: 0.9552
Epoch 3/10
30000/30000 [] - 3s 114us/step - loss: 0.1035 - acc: 0.9694 - val_loss: 0.1174 - val_acc: 0.9647
Epoch 4/10
30000/30000 [
] - 3s 113us/step - loss: 0.0744 - acc: 0.9774 - val_loss: 0.1060 - val_acc: 0.9682
Epoch 5/10
30000/30000 [] - 3s 109us/step - loss: 0.0532 - acc: 0.9841 - val_loss: 0.0975 - val_acc: 0.9715
Epoch 6/10
30000/30000 [
] - 3s 103us/step - loss: 0.0404 - acc: 0.9878 - val_loss: 0.1001 - val_acc: 0.9709
Epoch 7/10
30000/30000 [] - 4s 122us/step - loss: 0.0301 - acc: 0.9915 - val_loss: 0.0979 - val_acc: 0.9724
Epoch 8/10
30000/30000 [
] - 4s 130us/step - loss: 0.0223 - acc: 0.9939 - val_loss: 0.1012 - val_acc: 0.9725
Epoch 9/10
30000/30000 [] - 3s 109us/step - loss: 0.0164 - acc: 0.9957 - val_loss: 0.0963 - val_acc: 0.9744
Epoch 10/10
30000/30000 [
] - 4s 118us/step - loss: 0.0125 - acc: 0.9971 - val_loss: 0.0986 - val_acc: 0.9737

#提取his中的信息
his_dict=his.history
loss=his_dict['loss']
val_loss=his_dict['val_loss']
acc=his_dict['acc']
val_acc=his_dict['val_acc']
epoch=range(1,len(loss)+1)
#画图
plt.plot(epoch,loss,'k',label='train_loss')
plt.plot(epoch,val_loss,'b',label='validation_loss')
plt.plot(epoch,acc,'r',label='accuracy')
plt.plot(epoch,val_acc,'g',label='accuracy')
plt.title('train ans valid')
plt.xlabel('epoch')
plt.ylabel('loss/acc')
plt.legend()plt.show()

#进行测试
test_loss,test_acu=net.evaluate(test_img,test_label)

10000/10000 [==============================] - 1s 56us/step

print('test_loss=',test_loss,'ntest_accuracy=',test_acu)

test_loss= 0.0941627221799965
test_accuracy= 0.9742

#图片的单独预测
prediction=net.predict(test_img)
plt.imshow(test_predict[11])
plt.show()
print('result:',np.argmax(prediction[11]))

result: 6

最终结果正确,预测完毕。

本文发布于:2024-01-28 06:23:55,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17063942395437.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数字   笔记   keras
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23