一、mnist手写数字识别
1、数据集介绍
mnist数据集是一个经典的数据集,其中包括70000个样本,包括60000个训练样本和10000个测试样本
2、下载地址:http://yann.lecun.com/exdb/mnist/
3、文件说明
train-images-idx3-ubyte.gz: training set images (9912422 bytes)
train-labels-idx1-ubyte.gz: training set labels (28881 bytes)
t10k-images-idx3-ubyte.gz: test set images (1648877 bytes)
t10k-labels-idx1-ubyte.gz: test set labels (4542 bytes)
4、特征值
每一个mnist数据单元有两部分组成:一张包含手写数字的图片和一个对应的标签。我们把这些图片设为“xs”,把这些标签设为“ys”。训练数据集和测试数据集都包含xs和ys
比如训练数据集的图片是mnist.train.images,训练数据集的标签是mnist.train.labels
我们可以知道图片是黑白图片,每一张图片包含28像素x28像素。我们把这个数组展开成一个向量。长度是28x28=784。因此,在mnist训练数据集中,mnist.train.images是一个形状为[60000, 784]的张量
5、目标值
mnist中的每个图像都具有相应的标签,0到9之间的数字表示图像中绘制的数字。用的是one-hot编码
二、mnist数据获取API
1、tensorflow框架自带了获取这个数据集的接口,所以不需要自行读取
2、数据集的引入
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
以上四个数据集的格式都为numpy.ndarray
三、案例实战
1、网络设计
我们采用只有一层,即最后,一个输出层的神经网络,也称之为全连接(full connected)层神经网络
一个样本有784个特征,每一个特征都有一个权重值,进行加权求和,加上偏置得到logits,然后给logits加上softmax映射,就会得出一组概率值,概率值当中最大的那个就是它的分类
2、全连接层计算
全连接做的事情就是矩阵相乘
tf.experimental.numpy.matmul(x1, x2) + bias
说明:
(1)return:全连接结果,供交叉损失运算
tf.keras.optimizers.SGD(learning_rate)
说明:
(1)梯度下降
(2)learning_rate:学习率
3、形状表示
x[None, 784] * w[784, 10] + bias[None, 10] = y[None, 10]
x是None行784列,y是None行10列。所以权重的形状是784行10列,偏置是None行10列