3.MNIST数据集分类

一、MNIST数据集及Softmax

1.MNIST数据集

大多数示例使用手写数字的MNIST数据集。该数据集包含60,000个用于训练的示例和10,000个用于测试的示例。
在这里插入图片描述
每一张图片包含28*28个像素,在MNIST 训练数据集 中是一个 形状为[60000,28,28] 的张量,我们首先需要把数据集转成[60000,784],然后才能放到网络中训练第一个维度数字用来索引图片第二个维度数字用来索引每张图片中的像素点。一般我们还需要把图片中的数据归一化0~1之间
在这里插入图片描述
MNIST数据集的标签介于0-9的数字,我们要把标签转化为"one-hotvectors"。一个one-hot向量除了一位数字是1外,其余维度数字都是0比如标签0将表示为([1,0,0,0,0,0,0,0,0,0]),标签3将表示为([0,0,0,1,0,0,0,0,0,0])。
因此,MNIST数据集的标签是一个[60000,10]的数字矩阵。
在这里插入图片描述

28*28=784,每张图片784个像素点,对应着784个神经元。最后输出10个神经元对应着10个数字

在这里插入图片描述

2.Softmax

Softmax作用就是把神经网络的输出转化为概率值。
我们知道MNIST的结果是0-9,我们模型可能推测出一张图片的数字9的概率是80%,是数字8的概率是10%,然后其他数字的概率更小,总体概率加起来等于1。这是一个使用softmax回归模型的经典案例。softmax模型可以用来给不同的对象分配概率。

在这里插入图片描述
比如输出有3个输出,输出结果为[1,5,3]

二、MNIST数据集分类

代码运行平台为jupyter-notebook,文章中的代码块,也是按照jupyter-notebook中的划分顺序进行书写的,运行文章代码,直接分单元粘入到jupyter-notebook即可。

1.导入第三方库

import numpy as np
from keras.datasets import mnist
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense
from tensorflow.keras.optimizers import SGD

2.加载数据及数据预处理

# 载入数据
(x_train,y_train),(x_test,y_test) = mnist.load_data()
#  (60000, 28, 28)
print("x_shape:\n",x_train.shape)
# (60000,)  还未进行one-hot编码 需要后面自己操作
print("y_shape:\n",y_train.shape)
# (60000, 28, 28) -> (60000,784)  reshape()中参数填入-1的话可以自动计算出参数结果 除以255.0是为了归一化
x_train = x_train.reshape(x_train.shape[0],-1)/255.0
x_test = x_test.reshape(x_test.shape[0],-1)/255.0
# 换one hot格式
y_train = np_utils.to_categorical(y_train,num_classes=10)
y_test = np_utils.to_categorical(y_test,num_classes=10)

3.训练模型

# 创建模型 输入784个神经元,输出10个神经元
model = Sequential([
        # 定义输出是10 输入是784,设置偏置为1,添加softmax激活函数
        Dense(units=10,input_dim=784,bias_initializer='one',activation="softmax"),
])
# 定义优化器
sgd = SGD(lr=0.2)

# 定义优化器,loss_function,训练过程中计算准确率
model.compile(
    optimizer=sgd,
    loss="mse",
    metrics=['accuracy']
)
# 训练模型
model.fit(x_train,y_train,batch_size=32,epochs=10)

# 评估模型
loss,accuracy = model.evaluate(x_test,y_test)

print("\ntest loss",loss)
print("accuracy:",accuracy)

最终运行结果:
在这里插入图片描述
注意

  • Dense(units=10,input_dim=784,bias_initializer='one',activation="softmax")这里用到了softmax激活函数
  • 这里我们使用的fit方法进行的模型训练,之前的线性回归和非线性回归的模型训练方式和这不同。

代码:

model.compile(
    optimizer=sgd,
    loss="mse",
    metrics=['accuracy']
)

添加metrics=['accuracy'], 可以在训练过程中计算准确率。

  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

布兹学长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值