一,Session(会话)的作用
tensorflow分为前端系统和后端系统,
前端系统:进行定义图的结构
后端系统:运算图的结构
会话起到前端系统和后端系统的桥梁
作用:
1.运行图结构
2.分配资源计算
3.掌握资源(变量的资源,队列,线程)
二, 会话的使用
tf.Session()
一次只能运行一张图,且默认运行默认的图,所以想要运行特定的图需要传入参数:
tf.Session(graph=g)
通过sess.run()
启动整个图
通过sess.close()
关闭整个图进行资源释放
一定要进行close进行释放内存
使用上下文管理器
在with
语句块中,不论运行结果如何,都会执行close()
方法,避免资源的重复调用
with tf.Session(graph=g) as sess:
print(sess.run(sum2))
可以发现这里不用执行close方法就能关闭session
三,会话的run方法
run(fetches, feed_dict=None, options=None, run_metadata=None)
运行ops和计算tensor
- fetches 可以是单个图形元素,或任意嵌套列表,元组,namedtuple,dict或OrderedDict
- feed_dict 允许调用者覆盖图中指定张量的值
1,op类型进行运算
with tf.Session() as sess:
#run一个tensor
print(sess.run(sum1))
#run多个tensor(使用列表):
print(sess.run([a,b,sum1]))
2,整型和op型进运算
#有重载机制,默认给运算符重载为op类型
var1 = 2
sum2 = a + var1
with tf.Session() as sess:
print(sess.run(sum2))
3,placeholder进行占位操作
有时候我们图中的数据是动态生成的,不是固定不变的,这时候我们就可以使用placeholder
#placeholder是一个占位符
#数据类型为float32,大小为两行三列
plt = tf.placeholder(tf.float32, [2, 3])
4,feed_dict传入占位的数据
run方法里面的feed_dict参数传入在前面placeholder进行占位的数据
#使用feed_dict 传入占位的字典字典数据类型数据
#这里由于传入的参数只有一个为占位符类型的数据plt,所以在feed_dit 里面只填一个键值对类型的数据,键为plt,值为行三列的列表
with tf.Session as sess:
print(sess.run(plt,feed_dict={plt:[[1, 2, 3, ],[4, 5, 6,]]}))
运行结果:
完整代码
#coding:utf-8
#会话(session)作用:
#1.运行图结构 2.分配资源计算 3.掌握资源
import tensorflow as tf
#实现一个加法运算
a = tf.constant(3.0)
b = tf.constant(4.0)
sum1 = tf.add(a, b)
#run op
with tf.Session() as sess:
#run一个op
print(sess.run(sum1))
#run多个op(使用列表):
print(sess.run([a,b,sum1]))
#有重载机制,默认给运算符重载为op类型
var1 = 2
sum2 = a + var1
with tf.Session() as sess:
print(sess.run(sum2))
#placeholder是一个占位符
#数据类型为float32,大小为两行三列
plt = tf.placeholder(tf.float32, [2, 3])
#使用feed_dit 传入占位的字典字典数据类型数据
#这里由于传入的参数只有一个为占位符类型的数据plt,所以在feed_dit 里面只填一个键值对类型的数据,键为plt,值为行三列的列表
with tf.Session() as sess:
print(sess.run(plt, feed_dict={plt: [[1, 2, 3, ], [4, 5, 6,]]}))