roger.svg

Roger's

This is the way.

TensorFlow-2学习笔记-2-基础知识

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

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

运行结果:
<pre>[3 4 5]</pre>

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

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

运行结果:
[3 4 5]

默认会话

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

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

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

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) node1init=node1.initializer tf.globalvariables_initializer()可以一次执行所有 Variable 的 initializer

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 下面的例子使用了占位符,从终端输入数字并计算

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)

运行结果:

a=2
b=6
8.0

Feed 与 Fetch

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

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

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 输出的日志文件可视化运行状态 接着上方的例子,加上日志输出的操作

logdir='D:/log'
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()清除之前存在的图,避免混乱

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() 合并摘要,包含所有输入摘要的值