第一阶段-入门详细图文讲解tensorflow1.4 -(六)tensorflow运行机制MNIST
来源:互联网 发布:dynamic duo知乎 编辑:程序博客网 时间:2024/05/02 10:34
本篇blog目的:展示如何使用tensorflow训练和评估一个简单的前馈神经网络。a simple feed-forward neural network 。面向一些有经验的机器学习人员。
使用的两个文件。
准备数据
1,使用MNIST的数据。
2,我们适应额外的两个占位符tf.placeholder。
images_placeholder = tf.placeholder(tf.float32, shape=(batch_size, mnist.IMAGE_PIXELS))labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))
一,构建图
通过使用mnist.py文件,我们有三段式的过程去创建一张图。inference(), loss(), and training()
1,inference()根据需要构建图,以便向前运行网络。
2,loss() 添加图所需要的损失操作。
3,training() 向损失图中,添加梯度计算的操作。
1,inference()
with tf.name_scope('hidden1'):
在每一层中,添加作用域,作用就是将每一层分开,方便参数命名,例如hidden1/weights,表示层下的参数。
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')
这两个变量的初始化,之前有讲过的。不做累述
hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases)hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)logits = tf.matmul(hidden2, weights) + biases
tf.nn.relu()层的激活函数。有专题讲解激活函数。
tf.matmul()做举证相成操作。
———-inference()结束———–
2,loss()向图中添加损失操作。
labels = tf.to_int64(labels)cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits( labels=labels, logits=logits, name='xentropy')
tf.nn.sparse_softmax_cross_entropy_with_logits()有文档介绍。
loss = tf.reduce_mean(cross_entropy, name='xentropy_mean')
tf.reduce_mean()用于计算交叉熵的平均值
注意: 交叉熵是信息论的一个量,用于描述神经网络中预测分布于真实分布的度量。 了解更多(http://colah.github.io/posts/2015-09-Visual-Information/)
————inference()结束————
3,training()向损失图中,添加梯度计算的操作。
#tf.summary.scalar('loss', loss)#设置学习率optimizer = tf.train.GradientDescentOptimizer(learning_rate)#这是步伐global_step = tf.Variable(0, name='global_step', trainable=False)#函数更新系统中的权重以使得loss变小、并作为增加全局步骤的计数器train_op = optimizer.minimize(loss, global_step=global_step)
———–training()结束————-
二,训练模型
使用fully_connected_feed.py文件,进行模型训练。
1,图
with tf.Graph().as_default():
创建一个默认全局graph实例。
当然也可以使用多个graph。
2,会话
#第一种形式sess = tf.Session()
#第二种形式with tf.Session() as sess:
通常情况下,我们需要预先初始化所有variables。
init = tf.global_variables_initializer()
sess.run(init)
The tf.Session.run method 用来运行会话。通常第一步先初始化所有图的参数,第二步就是运行,但是通常是循环运行。
3,循环运行模型
for step in xrange(FLAGS.max_steps): sess.run(train_op)
通常使用这种python语法。通常会分割一个输入数据集,进行每一步的训练。
4,向图中喂数据
images_feed, labels_feed = data_set.next_batch(FLAGS.batch_size,FLAGS.fake_data)
一般会分割数据集,成多个小片。batch喂图
feed_dict = { images_placeholder: images_feed, labels_placeholder: labels_feed,}
5,检查的状态
一般我们设置每100步,监控看一下运行的状态。
for step in xrange(FLAGS.max_steps): feed_dict = fill_feed_dict(data_sets.train, images_placeholder, labels_placeholder) _, loss_value = sess.run([train_op, loss], feed_dict=feed_dict)if step % 100 == 0: print('Step %d: loss = %.2f (%.3f sec)' % (step, loss_value, duration))
6,可视化状态TensorBoard
summary = tf.summary.merge_all()summary_writer = tf.summary.FileWriter(FLAGS.train_dir, sess.graph)summary_str = sess.run(summary, feed_dict=feed_dict)summary_writer.add_summary(summary_str, step)
关于TensorBoard更多信息,有专题介绍。
7,保存一个监测点
saver = tf.train.Saver()saver.save(sess, FLAGS.train_dir, global_step=step)
保存一个监测点,用于以后接着运行。
saver.restore(sess, FLAGS.train_dir)
重新加载监测点。接着运行模型。
三,评估模型
每一千步,我们就进行一次评估,验证,预测。使用do_eval()方法。
print('Training Data Eval:')do_eval(sess, eval_correct, images_placeholder, labels_placeholder, data_sets.train)print('Validation Data Eval:')do_eval(sess, eval_correct, images_placeholder, labels_placeholder, data_sets.validation)print('Test Data Eval:')do_eval(sess, eval_correct, images_placeholder, labels_placeholder, data_sets.test)
通常情况下,我们只评估一部分测试数据。但是MNIST数据比较少,所有我们将全部数据进行评估。
1,构建一个评估图
来自mnist.py中的evaluation()方法提供
eval_correct = mnist.evaluation(logits, labels_placeholder)eval_correct = tf.nn.in_top_k(logits, labels, 1)
2,评估输出
for step in xrange(steps_per_epoch): feed_dict = fill_feed_dict(data_set, images_placeholder, labels_placeholder) true_count += sess.run(eval_correct, feed_dict=feed_dict)
precision = true_count / num_examplesprint(' Num examples: %d Num correct: %d Precision @ 1: %0.04f' % (num_examples, true_count, precision))
———–本blog结束—–
- 第一阶段-入门详细图文讲解tensorflow1.4 -(六)tensorflow运行机制MNIST
- 第一阶段-入门详细图文讲解tensorflow1.4 -(四)新手MNIST
- 第一阶段-入门详细图文讲解tensorflow1.4 -(五)MNIST-CNN
- 第一阶段-入门详细图文讲解tensorflow1.4 -(三)TensorFlow 编程基础知识
- 第一阶段-入门详细图文讲解tensorflow1.4 -简介(一)
- 第一阶段-入门详细图文讲解tensorflow1.4 API-tf.truncated_normal
- 第一阶段-入门详细图文讲解tensorflow1.4 API-tf.reshape
- 第一阶段-入门详细图文讲解tensorflow1.4 -安装(二)Windows CPU or GPU
- 第一阶段-入门详细图文讲解tensorflow1.4 -(七)tf.estimator的IRIS
- 第一阶段-入门详细图文讲解tensorflow1.4 -(八)tf.estimator构建数据预处理bostonHouse
- 第一阶段-入门详细图文讲解tensorflow1.4 -(九)TensorBoard: Visualizing Learning
- 第一阶段-入门详细图文讲解tensorflow1.4 -(十)TensorBoard: Graph Visualization
- 第一阶段-入门详细图文讲解tensorflow1.4 -(十一)TensorBoard Histogram Dashboard
- 第一阶段-入门详细图文讲解tensorflow1.4 API-tf.nn.conv2d
- 第一阶段-入门详细图文讲解tensorflow1.4 API-tf.nn.max_pool
- Tensorflow入门(MNIST学习)
- TensorFlow+MNIST实例讲解
- [tensorflow 入门] MNIST 入门
- MyBatis 常用写法
- [Java集合](一)概述
- 使用layui修改table样式
- 有关项目依赖包发生 Manifest Merge 冲突的详细解决方案
- 初识EM算法
- 第一阶段-入门详细图文讲解tensorflow1.4 -(六)tensorflow运行机制MNIST
- flume系列-flume负载均衡(存HDFS)
- bzoj2751 [HAOI2012]容易题 数学
- Spring @Autowired 注入集合类型的问题
- 评估红酒口感
- AHP
- Redis Cluster 集群一致性原理及slot迁移测试
- HDU
- appium混合测试进行初始化