tensorflow003-会话session

一,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,]]}))

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_38441692/article/details/87916493