概述
目录
- 一、会话
- 会话的模式 I
- 会话的模式 II
- 交互式环境下设置默认会话
- 二、常量和变量
- 常量
- 变量
- 三、变量赋值
- 四、占位符、数据填充和数据获取
- placeholder占位符
- Feed提交数据和Fetch提取数据
注:TensorFlow1.x仍是目前较流行的框架,还具有较高的研究价值。因此,本文语法是基于TensorFlow1.x的
一、会话
会话的模式 I
#定义计算图
tens1 = tf.constant([1,2,3])
#创建一个会话
sess = tf.Session()
#使用这个创建好的会话来得到关心的运算的结果。比如可以调用sess. run(result)来得到张量result的取值
print(sess.run(tens1))
#关闭会话使得本次运行中使用到的资源可以被释放
sess.close()
[1 2 3]
但在程序运行过程中,往往会出现异常。这时候有可能会导致session.close函数不能正常运行,从而造成资源泄露。
于是,我们可以考虑捕捉异常。
tens1 = tf.constant([1,2,3])
sess = tf.Session()
try:
print(sess.run(tens1))
except:
print("Exception!")
finally:
sess.close()
会话的模式 II
#定义计算图
node1 = tf.constant(3.0,tf.float32, name= "node1")
node2 = tf.constant(4.0,tf.float32, name= "node2")
result = tf.add(node1, node2)
#创建一一个会话,并通过Python中的上下文管理器来管理这个会话
with tf.Session() as sess:
#使用这创建好的会话来计算关心的结果
print(sess. run(result))
#不需要再调用Session.close()函数来关闭会话
#当上下文退出时会话关闭和资源释放也自动完成了
7.0
TensorFlow不会自动生成默认的会话,需要手动指定
当默认的会话被指定之后可以通过tf.Tensor.eval
函数来计算一个张量的取值
#定义计算图
node1 = tf.constant(3.0,tf.float32, name= "node1")
node2 = tf.constant(4.0,tf.float32, name= "node2")
result = tf.add(node1,node2)
sess = tf.Session()
#注册成为默认的会话
with sess.as_default():
print(result.eval())
7.0
下面的代码也可以完成相同的功能
#定义计算图
node1 = tf.constant(3.0,tf.float32, name= "node1")
node2 = tf.constant(4.0,tf.float32, name= "node2")
result = tf.add(node1,node2)
sess = tf . Session()
#下面两个命令有相同的功能
print(sess.run(result))
print (result.eval(session=sess))
7.0
7.0
如果把此处的参数session=sess
删除,则会报错。上一段代码之所以不报错,就是因为已经注册了默认会话。
交互式环境下设置默认会话
在交互式环境下,通过设置默认会话来获取张量的取值更加方便
使用tf.InteractiveSession
函数会自动将生成的会话注册为默认会话
node1 = tf.constant(3.0,tf.float32, name= "node1")
node2 = tf.constant(4.0,tf.float32, name= " node2")
result = tf.add(node1,node2)
sess = tf.InteractiveSession()
print(result.eval())
sess.close()
7.0
二、常量和变量
常量
创建:constant_ name = tf. constant (value)
a = tf.constant(1.0, name='a')
b = tf.constant(2.5, name='b')
C = tf.add(a, b, name='c')
sess = tf.Session()
C_value = sess. run(c)
print(c_value)
sess. close()
3.5
变量
创建:name_variable = tf. Variable (value,name)
个别变量初始化:init_op = name_variable. initializer ()
所有变量初始化:init_op = tf.global_variables_initializer ()
node1 = tf.Variable(3.0,tf.float32, name= "node1" )
node2 = tf.Variable(4.0,tf.float32, name=" node2")
result = tf.add(node1, node2, name= 'add')
sess = tf .Session()
#变量初始化
init = tf.globa1_variables_initializer()
sess.run(init)
#以上代码在Session对话变量后,增加了一个init初始化变量,并调用会话的run命令对参数进行初始化。
print(sess.run(result))
7.0
三、变量赋值
一般情况下,TensorFlow中的变量定义后,无需人工赋值。而特殊情况需要人工更新的,可用变量赋值语句:update_op = tf.assign(variable_to_be_updated, new_value)
#通过变量赋值输出1、2、3...10
import tensorflow as tf
tf.reset_default_graph() #清除default graph和不断增加的节点(清空计算图)
value = tf.Variable(0,name="value")
one = tf.constant(1)
new_value = tf.add(value,one)
update_value = tf.assign(value, new_value)
init = tf.global_variables_initializer()
with tf.Session() as sess :
sess.run(init)
for _ in range(10):
sess.run(update_ value)
print(sess.run(value))
#logdir改为自己机器上的合适路径
logdir='#path'
#生成一个写日志的writer,并将当前的TensorFlow计算图写入日志
writer = tf.summary.FileWriter(logdir,tf.get_default_graph())
writer.close()
以上部分代码是为了内部可视化添加的
四、占位符、数据填充和数据获取
placeholder占位符
TensorFlow中的有些变量,在定义时不知道其数值,只有在程序运行时,才由外部输入(如训练数据),此时就需要使用占位符。
定义:tf.placeholder(dtype.shape=None,name=None)
x = tf.placeholder(tf.float32,[2, 3],name='tx')
#此代码生成一个2x3的二维数组,矩阵中每个元素的类型都是tf.fLoat32,内部对应的符号名称是tx
Feed提交数据和Fetch提取数据
如果构建了一个包含placeholder操作的计算图,当在session中调用run方法时,placehoIder占用的变量必须通过feed_dict
参数传递进去,否则报错。
import tensorflow as tf
a = tf.p1aceholder(tf.float32,name='a')
b = tf.placeholder(tf.float32,name='b')
C = tf.multiply(a, b, name='c')
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
#通过feed_dict的参数传值,按字典格式
result = sess.run(c, feed_dict={a:8.0, b:3.5})
print(resu1t)
28.0
此处删除sess.run(init)
不会报错,placeholder不等同于变量,不需要初始化。
多个操作可以通过一次Feed完成执行
import tensorflow as tf
a = tf.placeholder(tf.float32, name='a')
b = tf.placeholder(tf.float32, name='b')
C = tf.multiply(a, b, name='c')
d = tf.subtract(a, b, name='d')
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess. run(init)
#将c和d组成一个列表
result = sess.run([c,d], feed_dict={a:[8.0,2.0,3.5], b:[1.5,2.0,4.]})
print(result)
#取结果中的第一个
print(resu1t[0])
[array([ 12. , 4., 14.], dtype=float32), array([ 6.5,0. ,-0.5], dtype=float32)]
[12. 4. 14.]
一次返回多个值分别赋给多个变量
import tensorflow as tf
a = tf.placeholder(tf.float32, name='a')
b = tf.placeholder(tf.float32, name='b')
C = tf.multip1y(a, b,name='c' )
d = tf.subtract(a, b,name='d' )
init = tf.globa1_variables_initializer()
with tf.Session() as sess:
sess.run(init)
#返回的两个值分别赋给两个变量
rc,rd = sess.run([c,d], feed_dict={a:[8.0,2.0,3.5], b:[1.5,2.0,4.]})
print("value of c=",rc,"value of d=",rd)
value of c=[12. 4. 14.] value of d=[6.5 0. -0.5]
最后
以上就是奋斗书本为你收集整理的TensorFlow基本运算一、会话二、常量和变量三、变量赋值四、占位符、数据填充和数据获取的全部内容,希望文章能够帮你解决TensorFlow基本运算一、会话二、常量和变量三、变量赋值四、占位符、数据填充和数据获取所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复