MNIST手写数字识别--案例

#先写出程序的框架步骤,再一点点的进行填充即可

实现步骤:

一,加载数据集
二,将数据由二维铺开成一维数据
三,设置神经网络
四,神经网络训练
五,用训练好的模型进行预测,并在测试集上做出评价

代码实现:

from tensorflow.keras.utils import to_categorical
from tensorflow.keras import  models,layers,regularizers
# # from keras.optimizers import RMSprop
from tensorflow.keras.optimizers import RMSprop #均方传播
from tensorflow.keras.datasets import  mnist #使用minst传播
import matplotlib.pyplot as plt
import tensorflow as tf


#一,加载数据集
mint = tf.keras.datasets.mnist
(train_images,train_labels),(test_images,test_labels)=mint.load_data() #将mnsit数据读入到四个变量中,分别是训练集图像,训练集标签,测试集图像,测试集标签,
# print(train_images.shape,test_images.shape)  #查看图像的信息,形状大小:(60000, 28, 28) (10000, 28, 28)表示训练集有60000张图片,每张图片的大小是28*28大小的矩阵;测试集有10000张图片,类推
#
# print(train_images[0])  #打印第一张图像的像素信息
# print(train_labels[0])  #打印图像的数字标签:是0还是1
# plt.imshow(train_images[0])
# plt.show()
#二,将数据由二维铺开成一维数据
train_images=train_images.reshape(60000,28*28).astype('float')  #reshape表示将6万张图片变成28*28=784一行的向量,等同于将二维矩阵压缩为一维向量,
# astype的作用将数据类型转换为float类型,因为下面的计算会涉及到梯度,权重等都是小数值,故用astype('float)
test_images=test_images.reshape(10000,28*28).astype('float')
train_labels=to_categorical(train_labels)  #ont-hot编码,我也不太懂
test_labels=to_categorical(test_labels)

#三,设置神经网络
network=models.Sequential()
network.add(layers.Dense(units=128,activation='relu',input_shape=(28*28,),))  #表示全连接层,,units表示15个神经元,激活函数是relu函数,默认使用relu激活函数,
#network.add(layers.Dropout(0.01))  #1/100的概率让神经元丧失功能
network.add(layers.Dense(units=32,activation="relu"))
#network.add(layers.Dropout(0.01))  #1/100的概率让神经元丧失功能
network.add(layers.Dense(units=10,activation='softmax')) #表示输出层,units=10个神经元,softmax的输出可以认为是一个概率值

#四,神经网络训练
#1.编译:确定优化器和损失函数等
network.compile(optimizer=RMSprop(lr=0.001),loss='categorical_crossentropy',metrics=["accuracy"])
#2.训练网络:确定训练的数据,训练的轮数和每次训练的样本等
   #训练网络;用fit函数,epochs表示训练多少个回合,batch_size表示每批训练多少个数据
network.fit(train_images,train_labels,epochs=20,batch_size=128,verbose=2)

#五,用训练好的模型进行预测,并在测试集上做出评价
 #来在测试集上测试一下模型的性能吧
# y_pre=network.predict(test_images[:5])  # 在测试集上取前五张图片进行测试效果
# print(y_pre,test_labels[:5])   #与test_labes前五张图片中真实的值进行直观的比较,看看是否是一一对应的
test_loss,test_accuracy=network.evaluate(test_images,test_labels) #在10000张图片中的准确率是多少
print("test_loss:",test_loss,"   test_accuracy:",test_accuracy)   #打印输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值