PS:https://playground.tensorflow.org 推荐一个很有意思的网站,够你玩一个下午的,并且能够帮助你更好理解什么是调参 ~
目录
MNIST 手写数字库
单层神经网络实现MNIST的分类
- 训练训练集
- 测试测试集
- 可视化 tensorboard
- 模型参数
- loss、accuracy
- 网络流程图
- 参数的保存 Saver
- Timeline
一、MNIST 手写数字数据库
1.数据集
分为60000行的训练数据集(mnist.train
)和10000行的测试数据集(mnist.test
)
每张图片的像素 28x28 被展开为长度 784 的行向量
训练数据:
图片:mnist.train.images
是一个形状为 [60000, 784]
图片的标签:mnist.train.labels
是一个 [60000, 10]
使用的是one-hot 独热码
one-hot:使用N位状态寄存器来对N个状态进行编码,并且在任意时候,只有一位有效。最大优势在于状态比较时仅仅需要比较一个位,运算简单,但是占用资源多
2.MNIST手写数字数据集的下载
使用下面的代码加载失败
1 | import tensorflow.examples.tutorials.mnist.input_data |
由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败
采取下面的办法解决 https://blog.csdn.net/Li_haiyu/article/details/78465806
3.PCA 可视化 MNIST 手写数字识别数据集
http://projector.tensorflow.org/
PCA 是一种常用的数据降维方法,可以将高维数据在二维或者三维可视化呈现
4.MNIST的可视化
两种方法:
- tensorflow 中的 MNIST 模块读取图片(不需要将文件解压缩)
- struct模块从二进制文件中读取图片(需要将文件解压缩)
http://www.cnblogs.com/youmuchen/p/6713241.html
https://www.cnblogs.com/zhouyang209117/p/6436751.html
二、代码实现
1.代码流程
- 输入训练集和测试集
- 构造神经网络
- 输入训练样本的x[55000,784]、y[55000,10] 一个样本为一行
- 设置神经网络参数 W[784,10]、b[10]
- 计算 y_prediction = x*W + b
- softmax计算10种类别各自的概率
- 交叉熵计算loss
- 训练网络
- 用训练集计算准确率
2.附加功能
- 可视化 tensorboard
- 参数
- loss、accuracy
- 图片
- 参数的保存 Saver
- Timeline
3.贴代码
train_or_test == 0 时训练网络得到参数
可以看到每隔50次训练的loss值
train_or_test == 1 用得到的模型计算测试集精确度
测试集的精确度有0.88
三、tensorboard
- 网络结构
- 每隔50次训练的loss
- 每隔50次测试集的精确度
四、Timeline
不要问我这个是啥意思,我也不知道,看不懂 ~