TensorFlow力学101笔记[4]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TensorFlow力学101笔记[4]相关的知识,希望对你有一定的参考价值。
TensorFlow力学101笔记[4]
本教程的目的是展示如何使用TensorFlow来训练和评估使用(经典)MNIST数据集的手写数字分类的简单前馈神经网络。
教程文件
本教程引用以下文件:
文件 | 目的 |
---|---|
mnist.py |
构建完全连接的MNIST模型的代码。 |
fully_connected_feed.py |
使用Feed字典对下载的数据集训练构建的MNIST模型的主要代码。 |
fully_connected_feed.py
直接运行文件开始培训:
python fully_connected_feed.py
准备数据
MNIST是机器学习中的一个经典问题。问题是查看手写数字的灰度28x28像素图像,并确定图像表示的数字,从0到9的所有数字。
下载
在该run_training()
方法的顶部,该input_data.read_data_sets()
函数将确保正确的数据已下载到您的本地培训文件夹,然后解包该数据以返回DataSet
实例的字典。
data_sets = input_data.read_data_sets(FLAGS.train_dir, FLAGS.fake_data)
注意:该fake_data
标志用于单元测试,读取器可能会被忽略。
数据集 | 目的 |
---|---|
data_sets.train |
55000张图片和标签,用于初级培训。 |
data_sets.validation |
5000张图像和标签,用于训练准确性的迭代验证。 |
data_sets.test |
10000张图像和标签,用于最终测试训练的精度。 |
输入和占位符
该placeholder_inputs()
函数创建两个tf.placeholder
操作,定义输入的形状,包括batch_size
图形的其余部分,实际训练示例将被馈送到该操作中
images_placeholder = tf.placeholder(tf.float32, shape=(batch_size,
mnist.IMAGE_PIXELS))
labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))
进一步下来,在训练循环中,将完整图像和标签数据集切片以适应batch_size
每个步骤,与这些占位符操作相匹配,然后sess.run()
使用feed_dict
参数传递到函数中。
构建图
产生用于数据的占位符后,将图表从内置 mnist.py
文件根据3级图案:inference()
,loss()
,和training()
。
inference()
- 建立图表,直到运行网络前进来进行预测。loss()
- 添加推理图,生成损失所需的操作。training()
- 将损耗图表添加到计算和应用渐变所需的操作。
推理
该inference()
函数根据需要构建图形,以返回包含输出预测的张量。
它将图像占位符作为输入,并在其顶部构建一对具有ReLU激活的完全连接的层,之后是指定输出逻辑的十个节点线性层。
每个图层都创建在唯一的下面tf.name_scope
,作为在该范围内创建的项目的前缀。
with tf.name_scope(‘hidden1‘):
在定义的范围内,每个这些层要使用的权重和偏差被生成为tf.Variable
具有所需形状的实例:
weights = tf.Variable( tf.truncated_normal([IMAGE_PIXELS, hidden1_units], stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))), name=‘weights‘) biases = tf.Variable(tf.zeros([hidden1_units]), name=‘biases‘)
在 tf.truncated_normal
初始化生成与给定的平均值和标准偏差的随机分布。
然后,偏置被初始化tf.zeros
以确保它们以所有零值开始,它们的形状只是它们连接到的层中的单元数量。
然后创建图形的三个主要操作 - 为隐藏层tf.nn.relu
包装两个操作tf.matmul
和一个额外tf.matmul
的逻辑操作,每个操作依次tf.Variable
连接到每个输入占位符或上一个图层的输出张量。
hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases)
hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)
logits = tf.matmul(hidden2, weights) + biases
最后,logits
返回包含输出的张量。
loss
该loss()
功能通过添加所需的损失操作进一步构建图。
首先,将值labels_placeholder
转换为64位整数。然后,tf.nn.sparse_softmax_cross_entropy_with_logits
添加一个操作以自动生成1个热标签
labels = tf.to_int64(labels) cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits( labels=labels, logits=logits, name=‘xentropy‘)
然后,它使用tf.reduce_mean
以平均跨批尺寸的交叉熵值(第一尺寸)作为总损耗。
以上是关于TensorFlow力学101笔记[4]的主要内容,如果未能解决你的问题,请参考以下文章
Tensorflow学习笔记(对MNIST经典例程的)的代码注释与理解