TensorFlow学习笔记之四(MNIST数字识别)
文章目录
- 1. 关于MNIST数据集
- 2. 前向传播确定网络结构
- 2.1 涉及的方法
1. 关于MNIST数据集
数据集和input_data文件
- 有6万张28*28像素点的0~9手写数字图片和标签,用于测试。
- 有1万张28*28像素点的0~9手写数字图片和标签,用于测试。
每张图片有784个像素点(28*28=784)组成一个长度为784的一维数组,用做个输入特征
[000010011010...011010]728∗1\begin{gathered} \begin{bmatrix} 0 & 0 & 0 &0 & 1 & 0 &0 & 1 & 1 &0 & 1 & 0 &...&0 & 1 & 1 &0 & 1 & 0 \end{bmatrix} \end{gathered}_{728*1} [000010011010...011010]728∗1
图片的标签以一维数组形式给出,每个元素表示对应分类出现的概率。比如下面的标签表示数字4
[0000100000]\begin{gathered} \begin{bmatrix} 0 & 0 & 0 &0 & 1 & 0 &0 & 0 & 0 & 0 \end{bmatrix} \end{gathered} [0000100000]
2. 前向传播确定网络结构
""" 前向传播确定网络结构 """ """ 前向传播确定网络结构 """import tensorflow as tfINPUT_NODE = 784 # 输入节点 784(一张图片28*28,共有784个像素点)个 OUTPUT_NODE = 10 # 输出10数,这个等于要预测类别的数目。在这里表示的是该图片为0~9之间的概率LAYER1_NODE = 500 # 隐藏层节点个数def get_weight(shape, regularizer):"""初始化权重"""# 随机生成参数ww = tf.Variable(tf.truncated_normal(shape, stddev=0.1))if regularizer != None:"""如果使用正则化"""# 将每个变量的损失加入到总损失lossestf.add_to_collection('losses', tf.contrib.layers.l2_regularizer(regularizer)(w))return wdef get_bias(shape):"""初始化偏置值"""b = tf.Variable(tf.zeros(shape))return bdef forward(x, regularizer):"""该网络的结构有两层,一个隐藏层和一个输出层"""# x为1*784的矩阵,w1是一个784*500的矩阵,b1是一个1*500的矩阵w1 = get_weight([INPUT_NODE, LAYER1_NODE], regularizer)b1 = get_bias([LAYER1_NODE])y1 = tf.nn.relu(tf.matmul(x, w1) + b1) # 最终结果,y1是一个1*500的矩阵# y1为1*500的矩阵,w2为500*10的矩阵,b2为1*10的矩阵w2 = get_weight([LAYER1_NODE, OUTPUT_NODE], regularizer)b2 = get_bias([OUTPUT_NODE])y = tf.matmul(y1, w2) + b2 # 最终输出,y为一个1*10的矩阵return y整个网络大概是这个样子的
其中,输入X为一个1784的矩阵(为了方便自己记忆,就不说向量了)。w1是一个784500的矩阵,b1是一个1500的矩阵。第一层的输入为y1是一个1500的矩阵。
第二层的输入即第一层的输出,为y1(一个1500的矩阵)。w2为50010的矩阵,b2为110的矩阵。输出y为一个110的矩阵
2.1 涉及的方法
tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None):输出一个shape的张量,里面的参数服从正态分布,均值为mean,标准差为stddev,数据类型为dtype,随机种子为seed。
未完待续。。。
总结
以上是生活随笔为你收集整理的TensorFlow学习笔记之四(MNIST数字识别)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: WordPress上传大小限制问题
- 下一篇: log4j2使用笔记