计算图的执行需要在session中执行

1
2
3
4
5
6
7
node1=tf.constant([3,4,5])
sess=tf.Session()
print(sess.run(node1))
sess.close()

运行结果:
[3 4 5]

计算完成后需要关闭会话,回收资源session.close()
也可以使用Python的上下文管理器来管理这个会话

1
2
3
4
5
6
node2=tf.constant([3,4,5])
with tf.Session() as sess:
print(sess.run(node2))

运行结果:
[3 4 5]

默认会话

可以指定一个会话作为默认的会话,之后即可使用tf.Tensor.eval()函数在默认会话中计算张量,TensorFlow不会自动生成默认会话,需要手动指定

1
2
3
4
node3=tf.constant([3,4,5])
sess=tf.Session()
with sess.as_default():
print(node3.eval())

运行结果:
[3 4 5]
以下是没有指定默认session,eval()函数的用法,执行结果相同

1
2
3
4
node3=tf.constant([3,4,5])
sess=tf.Session()
print(sess.run(node3))
print(node3.eval(session=sess))

tf.IneractiveSession()可以自动将生成的会话注册成为默认会话

变量初始化

在TensorFlow2中是即时执行模式,变量创建后直接能计算
在1.x中变量必须先进行初始化,否则会报错
创建变量
node1=tf.Variable(“3.0”)
变量初始化(Variable.initializer)
node1_init=node1.initializer
tf.global_variables_initializer()可以一次执行所有Variable的initializer

1
2
3
4
5
6
7
8
node4=tf.Variable([3,4,5])
node5=tf.Variable([7,8,9])
result=tf.add(node4,node5)

with tf.Session() as sess:
init=tf.global_variables_initializer()
sess.run(init)
print(sess.run(result))

运行结果
[10 12 14]

占位符

变量需要初始化,但一些变量在定义时数值没有明确,比如需要外部输入数值的变量,于是需要占位符。tf.placeholder
x=tf.placeholder(tf.float32, [2,3], name="tx")
生成一个2x3的数组,其中的每个元素都为tf.float32
下面的例子使用了占位符,从终端输入数字并计算

1
2
3
4
5
6
7
8
9
10
a=tf.placeholder(tf.float32,name="a")
b=tf.placeholder(tf.float32,name="b")
c=a+b #与tf.add(a+b)一样,TensorFlow重载了运算符

a_value=float(input("a="))
b_value=float(input("b="))

with tf.Session() as sess:
result = sess.run(c,feed_dict={a:a_value,b:b_value})
print(result)

运行结果:

1
2
3
a=2
b=6
8.0

Feed与Fetch

在上面的程序中,session调用run方法使用了feed_dict对使用占位符的变量进行传值,否则将会报错

可以使用列表,一次Feed完成多个操作

1
2
3
4
5
6
7
8
a=tf.placeholder(tf.float32,name="a")
b=tf.placeholder(tf.float32,name="b")
c=a*b
d=a-b

with tf.Session() as sess:
result1,result2 = sess.run([c,d],feed_dict={a:[8.0,2.0,3.5],b:[1.5,2.0,4.0]})
print(result1,result2)

*是tf.multiply()的运算符重载,-是tf.substract()的重载
运行结果
[12. 4. 14.] [ 6.5 0. -0.5]

可视化

TensorBoard是TensorFlow的可视化工具,通过TensorFlow输出的日志文件可视化运行状态
接着上方的例子,加上日志输出的操作

1
2
writer=tf.summary.FileWriter(logdir,tf.get_default_graph())
writer.close()

接着在Anaconda Prompt中执行
tensorboard --logdir=D:\log
D:\log为自定义日志路径
如果不是Anaconda安装的,应该在环境里的终端运行是一样的
执行结束启动服务,访问http://localhost:6006/即可查看计算图结构

有需要可以使用tf.reset_default_graph()清除之前存在的图,避免混乱

1
2
3
4
5
6
7
8
9
10
11
12
tf.summary.FileWrite() 创建FileWriter和事件文件,会在logdir中创建一个新的事件文件
tf.summary.FileWriter.add_summary() 将摘要添加到事件文件
tf.summary.FileWriter.add_event() 向事件文件添加一个事件
tf.summary.FileWriter.add_graph() 向事件文件添加一个图
tf.summary.FileWriter.get_logdir() 获取事件文件的路径
tf.summary.FileWriter.flush() 将所有事件都写入磁盘
tf.summary.FileWriter.close() 将事件写入磁盘,并关闭文件操作符
tf.summary.scalar() 输出包含单个标量值的摘要
tf.summary.histogram() 输出包含直方图的摘要
tf.summary.audio() 输出包含音频的摘要
tf.summary.image() 输出包含图片的摘要
tf.summary.merge() 合并摘要,包含所有输入摘要的值


本文总访问