1.图,graph
2.2 图与TensorBoard
2.2.1 什么是图结构
图结构:
数据(Tensor) + 操作(Operation)
2.2.2 图相关操作
1 默认图
查看默认图的方法
1)调用方法
用tf.get_default_graph()
2)查看属性
.graph
2 创建图
new_g = tf.Graph()
with new_g.as_default():
定义数据和操作
首先数据都会有个默认图,如果想调用则有上述两种方法
若想将自己的数据存在一个新图,则要用下面的操作,且注意
代码如下:(用的是2.0但是学的是1.x版本的ten所以用了抬头的操作来让2代调用1代)
mport tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
#让二代调用一代方法
def graph_demo():
"""
图的演示
:return:
"""
# TensorFlow实现加法运算
a_t = tf.constant(2)
b_t = tf.constant(3)
c_t = tf.add(a_t, b_t)
print("a_t:\n", a_t)
print("b_t:\n", b_t)
print("c_t:\n", c_t)
# 查看默认图
# 方法1:调用方法
default_g = tf.compat.v1.get_default_graph()
print("default_g:\n", default_g)
# 方法2:查看属性
print("a_t的图属性:\n", a_t.graph)
print("c_t的图属性:\n", c_t.graph)
# 自定义图
new_g = tf.Graph()
# 在自己的图中定义数据和操作
with new_g.as_default():
a_new = tf.constant(20)
b_new = tf.constant(30)
c_new = a_new + b_new
print("a_new:\n", a_new)
print("b_new:\n", b_new)
print("c_new:\n", c_new)
print("a_new的图属性:\n", a_new.graph)
print("c_new的图属性:\n", c_new.graph)
#对于默认图的开启会话
with tf.Session() as sess:
c_t_value = sess.run(c_t)
print("c_new_value:\n", c_t_value)
# 开启new_g的会话
#注意这里session里参数graph需要重新定义到新图上,否则其默认调用默认图
with tf.Session(graph=new_g) as new_sess:
c_new_value = new_sess.run((c_new))
print("c_new_value:\n", c_new_value)
print("new_sess的图属性:\n", new_sess.graph)
graph_demo()
2.Tensorboard
2.2.3 TensorBoard:可视化学习
1 数据序列化-events文件
tf.summary.FileWriter(path, graph=sess.graph)
2 启动tensorboard
见下图
tf.summary.FileWriter("F:\\机器视觉\\new program", graph=sess.graph)
OP操作对象
相当于就是函数,进行运算的指令
每个指令对应唯一一个名称
如add
Tensor("add:0", shape=(), dtype=int32)
第一个参数就是指令名称,只由add产生
如constant
Tensor("Const_1:0", shape=(), dtype=int32)
PS:指令名称在不同图上面有不同的命名空间的,如果默认图有const-1,不影响自定义图有const-1
2.2.4 OP
数据:Tensor对象
操作:Operation对象 - Op
1 常见OP
操作函数 & 操作对象
tf.constant(Tensor对象) 输入Tensor对象 -Const-输出 Tensor对象
tf.add(Tensor对象1, Tensor对象2) 输入Tensor对象1, Tensor对象2 - Add对象 - 输出 Tensor对象3
2 指令名称
一张图 - 一个命名空间
指令名称的名称是可以改变的,因为OP中有name参数,即:
# TensorFlow实现加法运算
a_t = tf.constant(2, name="a_t")
b_t = tf.constant(3, name="a_t")
c_t = tf.add(a_t, b_t, name="c_t")
print("a_t:\n", a_t)
print("b_t:\n", b_t)
print("c_t:\n", c_t)
这样出来以后指令名称就变成了自定义的
且若定义重复,则会_1,_2