2.1.3.4 Mnist数据获取API
TensorFlow框架自带了获取这个数据集的接口,所以不需要自行读取。
- from tensorflow.examples.tutorials.mnist import input_data
- mnist = input_data.read_data_sets(FLAGS.data_dir, one_hot=True)
- mnist.train.next_batch(100)(提供批量获取功能)
- mnist.train.images、labels
- mnist.test.images、labels
2.1.3.5 网络设计
我们采取两个层,除了输入层之外。第一个隐层中64个神经元,最后一个输出层(全连接层)我们必须设置10个神经元的神经网络。
2.1.3.6 全连接层计算
- tf.matmul(a, b,name=None)+bias
- return:全连接结果,供交叉损失运算
- tf.train.GradientDescentOptimizer(learning_rate)
- 梯度下降
- learning_rate:学习率
- method:
- minimize(loss):最小优化损失
2.1.3.7 前期确定事情与流程
确定网络结构以及形状
- 第一层参数:输入:x [None, 784] 权重:[784, 64] 偏置[64],输出[None, 64]
- 第二层参数:输入:[None, 64] 权重:[64, 10] 偏置[10],输出[None, 10]
- 流程:
- 获取数据
- 前向传播:网络结构定义
- 损失计算
- 反向传播:梯度下降优化
- 功能完善
- 准确率计算
- 添加Tensorboard观察变量、损失变化
- 训练模型保存、模型存在加载模型进行预测
2.1.3.8 主网络搭建流程
- 获取数据
mnist = input_data.read_data_sets("./data/mnist/input_data/", one_hot=True)
定义数据占位符,Mnist数据实时提供给placeholder
# 1、准备数据 # x [None, 784] y_true [None. 10] with tf.variable_scope("mnist_data"): x = tf.placeholder(tf.float32, [None, 784]) y_true = tf.placeholder(tf.int32, [None, 10])
两层神经元网络结果计算
# 2、全连接层神经网络计算 # 类别:10个类别 全连接层:10个神经元 # 参数w: [784, 10] b:[10] # 全连接层神经网络的计算公式:[None, 784] * [784, 10] + [10] = [None, 10] # 随机初始化权重偏置参数,这些是优化的参数,必须使用变量op去定义 # 要进行全连接层的矩阵运算 [None, 784]*[784, 64] + [64] = [None,64] # [None, 64]*[64, 10] + [10] = [None,10] with tf.variable_scope("fc_model"): # 第一层:随机初始化权重和偏置参数,要使用变量OP 定义 weight_1 = tf.Variable(tf.random_normal([784, 64], mean=0.0, stddev=1.0), name="weightes_1") bias_1 = tf.Variable(tf.random_normal([64], mean=0.0, stddev=1.0), name='biases_1') # 第二层:随机初始化权重和偏置参数,要使用变量OP 定义 weight_2 = tf.Variable(tf.random_normal([64, 10], mean=0.0, stddev=1.0), name="weightes_2") bias_2 = tf.Variable(tf.random_normal([10], mean=0.0, stddev=1.0), name='biases_2') # 全连接层运算 # 10个神经元 # y_predict = [None,10] y1 = tf.matmul(x, weight_1) + bias_1 y_predict = tf.matmul(y1, weight_2) + bias_2
- 损失计算与优化
# 3、softmax回归以及交叉熵损失计算 with tf.variable_scope("softmax_crossentropy"): # labels:真实值 [None, 10] one_hot # logits:全脸层的输出[None,10] # 返回每个样本的损失组成的列表 loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_true, logits=y_predict)) # 4、梯度下降损失优化 with tf.variable_scope("optimizer"): # 学习率 train_op = tf.train.GradientDescentOptimizer(0.1).minimize(loss)