tensorflow(8)--识别MNIST数据集

上一篇文章讲了如何用keras搭建我们自己的网络,并且讲解了里面的一些常用参数,本篇文章将简短的介绍如何用上一篇文章中的框架识别MNIST数据集。

MNIST 数据集已经是一个被”嚼烂”了的数据集, 很多教程都会对它”下手”, 几乎成为一个 “典范”

 这里我们不太需要去官网下载,我们在第一次使用这个数据集的时候,会自动从官网下载,各位看官先继续往下看。

MNIST数据集:
提供6万张28*28像素点的0-9手写数字图片和标签,用于训练
提供1万张28*28像素点的0-9手写数字图片和标签,用于测试
导入MNIST  mnist = tf.keras.datasets.mnist
(x_train,y_train),(x_test,y_test) = mnist.load_data()
作为输入特征,输入神经网络时,将数据拉伸为一维数组 tf.keras.layers.Flatten()

首先咱们看看这个数据集里都是个什么东西

import tensorflow as tf
from tensorflow import keras
import matplotlib.pyplot as plt

mnist = keras.datasets.mnist
(x_train,y_train),(x_test,y_test) = mnist.load_data()
print(x_train[0])
print(y_train[0])
for i in range(10):
    plt.imshow(x_train[i])
    plt.show()

 

 

 

 图片显示出来之后吧,它就是一个个的手写数字体图片,然后就想办法对这个玩意进行处理呗

通过第一张截图大家伙也看到了,图片值是从0-255的,但是吧,这个值在计算的时候有点大,所以咱就稍微做一下处理,变小点

x_train,x_test = x_train/255.0,x_test/255.0

        哎,现在舒服了,x_train和x_test中每一个值都是0-1之间的了,做完预处理之后咱们就开始整网络结构呗,上篇咱咋说的来着?先把多维数组展平,然后再处理,所以需要

keras.layers.Flatten()这个东西放在第一层

然后吧,隐藏层是128神经元,输出层是10个神经元,因为数据集最后识别出来不是0-9这一共10个数字嘛,所以输出层神经元个数为10,中间那层,emmmmm,128是常用的可能,先按着来呗,具体为啥俺也不太清楚,有大佬(或者巨佬)明白的话可以评论区留下您的答案。

下面是网络构建的代码

model = keras.models.Sequential([
    keras.layers.Flatten(),
    keras.layers.Dense(128,activation='relu'),
    keras.layers.Dense(10,activation='softmax')
])

对了,这个最后一层如果是二分类的话,用sigmoid,如果是多分类,比如输出的结果有好多的话,就用softmax,小知识点,get了嘛-.-

然后就是compile,优化器选adam,损失函数选losses.SparseCategoricalCrossentropy,这些参数选取可以自己看着改,哪个效果好用哪个,如果不知道其他函数的话就先用我这个凑合凑合

配置完了就是fit训练,没啥好说的,下面放完整代码吧

import tensorflow as tf
from tensorflow import keras
import matplotlib.pyplot as plt

mnist = keras.datasets.mnist
(x_train,y_train),(x_test,y_test) = mnist.load_data()
# print(x_train[0])
# print(y_train[0])
# for i in range(3):
#     plt.imshow(x_train[i])
#     plt.show()

#
x_train,x_test = x_train/255.0,x_test/255.0

model = keras.models.Sequential([
    keras.layers.Flatten(),
    keras.layers.Dense(128,activation='relu'),
    keras.layers.Dense(10,activation='softmax')
])

model.compile(optimizer='adam',
              loss=keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              metrics=['sparse_categorical_accuracy'])

model.fit(x_train,y_train,batch_size=32,epochs=5,validation_data=(x_test,y_test),validation_freq=1)
model.summary()

运行一下子,结果如图

 准确率和损失如下

 看着效果还不错哈,0.97的准确率,那这篇文章就到这了呗,如果各位小伙伴觉得这篇文章对恁稍微有点用的话,给个免费的赞呗,生活不易,joker卖艺,各位下篇见!

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值