TF启程
我第一次开始接触到TensorFlow大概是去年五月份,大三下,如果一年多已过,我却还在写启程。。这进度,实在汗颜。。
一个完整的tensorflow程序可以分为以下几部分:
- Inputs and Placeholders
- Build the Graph
- Inference
- Loss
- Training
- Train the Model
- Visualize the Status
- Save a Checkpoint
- Evaluate the Model
- Build the Eval Graph
- Eval Output
Inputs and Placeholders
对于一个完整的网络来说,必定有输入还有输出,而Placeholders
就是针对网络输入来的,相当于预先给输入变量占个坑,拿mnist来说,占坑代码可以如下面的例子:
images_placeholder = tf.placeholder(tf.float32, shape=(batch_size,mnist.IMAGE_PIXELS))
labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size))
上述代码相当于为mnist图片和标签分别占坑,而tf.placeholder
参数可以如下面所示:
tf.placeholder(dtype, shape=None, name=None)
即需要提供占坑数据类型dtype
,占坑数据shape
,当然也可以给它提供一个唯一的name
。
Build the Graph
因为tf是通过构建图模型来进行网络搭建的,因此搭建网络也就是’Build the Graph’。
Inference
首先就是构建图,利用一系列符号将要表达的操作表达清楚,以用于后续模型的训练。如下面代码:
with tf.name_scope('hidden1'):
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.Variable
来声明变量,其参数格式如下:
tf.Variable(self, initial_value=None, trainable=True, collections=None, validate_shape=True,\
caching_device=None, name=None, variable_def=None, dtype=None)
需要提供变量初始值initial_value
, 是否接受训练trainable
,对于validate_shape
表示该变量是否可以改变,如果形状可以改变,那么应该为False
。对于每个变量,可以赋予不同的名字tf.name_scope
。
Loss
在定义完图结构之后,我们需要有个目标函数,用作更新图结构中的各个变量。
labels = tf.to_int64(labels)
cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits, labels, name='xentropy')
如上,通过给定的labels
占坑变量,完成手写数字识别的最后交叉熵函数。
Training
在得到目标函数之后,我们就可以对模型进行训练,这里常用梯度下降法。在训练阶段,我们可以通过tf.scalar_summary
来实现变量的记录,用作后续的tensorboard的可视化,如:
tf.scalar_summary(loss.op.name, loss)
然后通过tf.SummaryWriter()
来得到对应的提交值。
而对于模型的最优化,这里 tf 提供了很多optimazer,通常在tf.train
里面,这里常用的是GradientDenscentOptimizer(lr)
,然后通过调用:
train_op = optimizer.minimize(loss, global_step=global_step)
Train the Model
在模型训练时,我们需要打开一个默认的图环境,用作训练,如:
with tf.Graph().as_default():
以此来打开一个图结构,然后我们需要声明一个会话在所有操作都定义完毕之后,这样我们就可以利用这个session来运行Graph.可以通过如下方法声明:
with tf.Session() as sess:
init = tf.initialize_all_variables()
sess.run(init)
每次我们可以通过sess.run
来运行一些操作,进而获取其输出值,
sess.run(fetches, feed_dict=None, options=None, run_metadata=None)
可以看到,run需要fetches
,即操作,feed_dict
为fetches
的输入,即占坑变量与其对应值构成的字典。
Visualize the Status
当然,在运行过程,我们可以通过可视化的操作来看网络运行情况。
在之前的tf.scalar_summary
, 我们可以通过:
summary = tf.merge_all_summaries()
将在图构建阶段的变量收集起来,然后在session创建之后运行如下命令生成可视化的值。
summary_str = sess.run(summary, feed_dict=feed_dict)
summary_writer.add_summary(summary_str, step)
其中summary_writer
由如下得到:
summary_writer = tf.train.SummaryWriter(FLAGS.train_dir, sess.graph)
然后用tensorboard打开对应文件即可。
Save a Chenckpoint
对于模型的保存,可以通过如下代码实现:
saver = tf.train.Saver()
saver.save(sess, FLAGS.train_dir, global_step=step)
而载入模型可以通过如下的代码来实现:
saver.restore(sess, FLAGS.train_dir)
当然了,模型的估计就类似上述了。
这样简单的模型搭建到运行就完成了。本文主要用到这些函数:
tf.placeholder
tf.Variable
tf.train
tf.train.GradientDenscentOptimizer
tf.train.SummaryWriter
tf.train.Saver
tf.session
tf.Graph
tf.add_summary
tf.merge_all_summaries
其实构建一个模型基本就用这些函数,然后就是一些数理计算方法。详情参看tensorflow。
Reference:Link。
TF启程的更多相关文章
- TFS命令tf:undo(强制签入签出文件)
由于修改计算机名称或不同电脑上操作忘记签入,则需要强制签入文件 具体步骤如下: 1.在命令行中输入"cd C:\Program Files\Microsoft Visual Studio ...
- 制作HP MicroServer Gen8可用的ESXi 5.x SD/TF卡启动盘
前些日子看到HP公司和京东在搞服务器促销活动,于是就入了一个 ProLiant MicroServer Gen8 的低配版 相比上一代产品,新一代 MicroServer系列微型服务器可更换处理器,还 ...
- TF Boys (TensorFlow Boys ) 养成记(六)
圣诞节玩的有点嗨,差点忘记更新.祝大家昨天圣诞节快乐,再过几天元旦节快乐. 来继续学习,在/home/your_name/TensorFlow/cifar10/ 下新建文件夹cifar10_train ...
- TF Boys (TensorFlow Boys ) 养成记(五)
有了数据,有了网络结构,下面我们就来写 cifar10 的代码. 首先处理输入,在 /home/your_name/TensorFlow/cifar10/ 下建立 cifar10_input.py,输 ...
- TF Boys (TensorFlow Boys ) 养成记(四)
前面基本上把 TensorFlow 的在图像处理上的基础知识介绍完了,下面我们就用 TensorFlow 来搭建一个分类 cifar10 的神经网络. 首先准备数据: cifar10 的数据集共有 6 ...
- TF Boys (TensorFlow Boys ) 养成记(三)
上次说到了 TensorFlow 从文件读取数据,这次我们来谈一谈变量共享的问题. 为什么要共享变量?我举个简单的例子:例如,当我们研究生成对抗网络GAN的时候,判别器的任务是,如果接收到的是生成器生 ...
- TF Boys (TensorFlow Boys ) 养成记(二)
TensorFlow 的 How-Tos,讲解了这么几点: 1. 变量:创建,初始化,保存,加载,共享: 2. TensorFlow 的可视化学习,(r0.12版本后,加入了Embedding Vis ...
- TF Boys (TensorFlow Boys ) 养成记(一)
本资料是在Ubuntu14.0.4版本下进行,用来进行图像处理,所以只介绍关于图像处理部分的内容,并且默认TensorFlow已经配置好,如果没有配置好,请参考官方文档配置安装,推荐用pip安装.关于 ...
- ROS TF——learning tf
在机器人的控制中,坐标系统是非常重要的,在ROS使用tf软件库进行坐标转换. 相关链接:http://www.ros.org/wiki/tf/Tutorials#Learning_tf 一.tf简介 ...
随机推荐
- Openstack知识点总结
Openstack: 一.云计算+openstack概念: 1.云计算是一种按使用量付费的模式,这种模式提供可用的,便捷的,按需的访问,通过互联网进入可配置的计算资源共享池(资源包括网络,计算,存储, ...
- 李宏毅 Tensorflow解决Fizz Buzz问题
提出问题 一个网友的博客,记录他在一次面试时,碰到面试官要求他在白板上用TensorFlow写一个简单的网络实现异或(XOR)功能.这个本身并不难,单层感知器不能解决异或问题是学习神经网络中的一个常识 ...
- 【图像处理】H.264有四种画质级别
H.264有四种画质级别,分别是BP.EP.MP.HP,想要说明H.264 HP与H.264 MP的区别就要讲到H.264的技术发展了 H.264 视频编码技术在视频采集.后期制作等网络视频服务领域的 ...
- springboot整合es客户端操作elasticsearch(二)
在上章节中整合elasticsearch客户端出现版本问题进行了处理,这章来进行springboot整合得操作 环境:elaticsearch6.2.1,springboot 2.1.8 客户端版本采 ...
- 15.sqoop数据从mysql里面导入到HDFS里面
表数据 在mysql中有一个库userdb中三个表:emp, emp_add和emp_contact 表emp id name deg salary dept 1201 gopal manager 5 ...
- 【转帖】k8s之Deployment与service
k8s之Deployment与service 2018年08月05日 18:11:00 xiyou_pen/pen 阅读数 5894 版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权 ...
- Java更新Oracle的clob类型字段
Java更新Oracle的clob类型字段 1.查询该clob字段 2.处理该clob字段查询结果 3.更新该clob字段查询结果 1.查询该clob字段 <select id="se ...
- array_merge与数组加
array_merge() 索引数组:值不会覆盖,会重新索引; 关联数组:相同的键名,则最后的元素会覆盖其他元素. 数组+ 以左为主,按键加; Array ( [0] => A006 ) + A ...
- 如何给django admin.py配置超级管理员?注册表格?
admin.py是django给我们提供的功能非常强大的后台,况且支持拓展,,如果你要是觉得admin的后台不够牛逼你可以自己写一个!如何自己写一个后台,后面我有时间了会给大家更新!一起学习!一起进步 ...
- Python特色数据类型--列表
#list[起始索引:终止索引(不包含):步长间隔] list1[5:8] #步长省略则默认为1 #修改元素列表 #列表是一种可变的数据类型,所以可以修改内容 list1 = [0,1,2,3,4] ...