Slim
TF-Slim 模块是 TensorFlow 中最好用的 API 之一。尤其是里面引入的 arg_scope、model_variables、repeat、stack。
TF-Slim 是 TensorFlow 中一个用来构建、训练、评估复杂模型的轻量化库。TF-Slim 模块可以和 TensorFlow 中其它API混合使用。
Slim模块的导入
| |
Slim 构建模型
可以用 slim、variables、layers 和 scopes 来十分简洁地定义模型。下面对各个部分进行了详细描述:
Slim变量(Variables)
| |
Slim 层(Layers)
使用基础(plain)的 TensorFlow 代码:
| |
为了避免代码的重复。Slim 提供了很多方便的神经网络 layers 的高层 op。例如:与上面的代码对应的 Slim 版的代码:
| |
slim.arg_scope() 函数的使用
这个函数的作用是给list_ops中的内容设置默认值。但是每个list_ops中的每个成员需要用@add_arg_scope修饰才行。所以使用slim.arg_scope()有两个步骤:
- 使用@slim.add_arg_scope修饰目标函数
- 用 slim.arg_scope()为目标函数设置默认参数.
例如如下代码;首先用@slim.add_arg_scope修饰目标函数fun1(),然后利用slim.arg_scope()为它设置默认参数。1 2 3 4 5 6 7 8 9 10import tensorflow as tf slim =tf.contrib.slim @slim.add_arg_scope def fun1(a=0,b=0): return (a+b) with slim.arg_scope([fun1],a=10): x=fun1(b=30) print(x)
运行结果:40
参考链接:
https://blog.csdn.net/u013921430/article/details/80915696
其他用法见参考链接
https://blog.csdn.net/wanttifa/article/details/90208398
查看ckpt中变量的几种方法
查看ckpt中变量的方法有三种:
- 在有model的情况下,使用tf.train.Saver进行restore
- 使用tf.train.NewCheckpointReader直接读取ckpt文件,这种方法不需要model。
- 使用tools里的freeze_graph来读取ckpt
Tips: - 如果模型保存为.ckpt的文件,则使用该文件就可以查看.ckpt文件里的变量。ckpt路径为 model.ckpt
- 如果模型保存为.ckpt-xxx-data (图结构)、.ckpt-xxx.index (参数名)、.ckpt-xxx-meta (参数值)文件,则需要同时拥有这三个文件才行。并且ckpt的路径为 model.ckpt-xxx
1.基于model来读取ckpt文件里的变量
1.首先建立起model
2.从ckpt中恢复变量1 2 3 4 5 6 7 8 9 10with tf.Graph().as_default() as g: #建立model images, labels = cifar10.inputs(eval_data=eval_data) logits = cifar10.inference(images) top_k_op = tf.nn.in_top_k(logits, labels, 1) #从ckpt中恢复变量 sess = tf.Session() saver = tf.train.Saver() #saver = tf.train.Saver(...variables...) # 恢复部分变量时,只需要在Saver里指定要恢复的变量 save_path = 'ckpt的路径' saver.restore(sess, save_path) # 从ckpt中恢复变量
注意:基于model来读取ckpt中变量时,model和ckpt必须匹配。
2.使用tf.train.NewCheckpointReader直接读取ckpt文件里的变量,使用tools.inspect_checkpoint里的print_tensors_in_checkpoint_file函数打印ckpt里的东西
| |
3.使用tools里的freeze_graph来读取ckpt
| |
参考链接:
https://www.jb51.net/article/142183.htm
control_dependencies
tf.control_dependencies(control_inputs)
Wrapper for Graph.control_dependencies() using the default graph.
See Graph.control_dependencies() for more details.
此函数指定某些操作执行的依赖关系
返回一个控制依赖的上下文管理器,使用 with 关键字可以让在这个上下文环境中的操作都在 control_inputs 执行
| |
在执行完 a,b 操作之后,才能执行 c,d 操作。意思就是 c,d 操作依赖 a,b 操作
| |
tf.no_op()表示执行完 train_step, variable_averages_op 操作之后什么都不做
参考链接:
http://www.tensorfly.cn/tfdoc/api_docs/python/framework.html#Graph.control_dependencies
TensorBoard
在TensorBoard中可视化图形
构建您的网络,创建一个会话(session),然后创建一个TensorFlow File Writer对象
File Writer定义存储TensorBoard文件的路径,以及TensorFlow graph对象sess.graph是第二个参数。
| |
当创建一个TensorFlow网络后,定义并运行File Writer时,就可以启动TensorBoard来可视化图形。要定义File Writer并将图形发送给它,运行以下命令:
| |
启动TensorBoard
| |
名称空间(Namespaces)
名称空间是一种作用域,可以用它来包围图形组件,以便将它们组合在一起。通过这样的操作,名称空间中的细节将被折叠成TensorBoard计算图形可视化中的单个名称空间节点。要在TensorFlow中创建名称空间,可以使用Python with功能,如下所示:
| |
还可以使用tf.variable_scope()代替tf.name_scope()。变量作用域是TensorFlow中的get_variable()变量共享机制的一部分。
标量总结(Scalar summaries)
在网络中的任何位置,都可以记录标量(即单个实值)数量,以便在TensorBoard中显示。这对于跟踪诸如训练准确率的提高或损失函数的减少,或研究分布的标准差等方面都很有用。执行起来很容易。例如,下面的代码展示了如何在这个图中记录accuracy标量:
| |
第一个参数是要在TensorBoard可视化中给出标量的名称,第二个参数是要记录的操作(必须返回一个实值)。scalar()调用的输出是一个操作。在上面的代码中,我没有将这个操作分配给Python中的任何变量,但是如果用户愿意,可以这样做。然而,与TensorFlow中的其他操作一样,这些汇总操作在运行之前不会执行任何操作。根据开发人员想要观察的内容,在任何给定的图中通常都会运行许多可视化函数,因此有一个方便的助手函数merge_all()。这将把图中的所有函数调用合并在一起,这样您只需调用merge操作,它将为您收集所有其他函数操作并记录数据。它是这样的:
| |
图像可视化
| |
文本检测模型EAST的搭建
数据加载
| |
网络模型的搭建
| |
loss函数的设计
| |
train
| |