TensorFlow基础:Session(会话)

本文详细介绍了TensorFlow中Session的使用方法及重要性,并解释了如何利用占位符实现数据输入,包括创建Session、运行计算图、使用feed_dict参数以及占位符的应用场景。

**

Session(会话)

**
在tensorflow中数据流图中的Op在得到执行之前,必须先创建Session对象,
Session对象负责着图中所以Op的执行.
Session 对象创建时有三个可选参数:
1.target,在不是分布式中使用Session对象时,该参数默认为空
2.graph,指定了Session对象中加载的Graph对象,如果不指定的话默认加载当前默认的数据流图,但是如果有多个图,就需要传入加载的图对象
3.config,Session对象的一些配置信息,CPU/GPU使用上的一些限制,或者一些优化设置

import tensorflow as tf
# 在默认数据流图中创建Op,tensor
# tf.add()是一个Operation简称Op,a是一个tensor
a = tf.add(1, 2)
b = tf.add(a, 3)
# 创建一个Session对象,没有指定graph参数默认加载,默认数据流图
sess = tf.Session()
sess = tf.Session(graph=tf.get_default_graph)
# 以上两种方式是等价的,都是加载默认数据流图
Session对象的run()方法
run()计算张量对象的输出,
sess.run(a)    # 输出3
sess.run(b)    # 输出6
run()方法接受一个参数和三个可选参数:
1.fecthes,接受数据流图中的(所有的Op和tensor),也就是希望执行的对象,tensor对象一般会返回数或数组,Op没有返回值None.
# 在sess.run(b)中,fecthes的参数是tensor:b,(对应的Op是tf.add()),
# sess会找到与b有数据依赖的节点,然后顺序执行
sess.run(b)

#fecthes也会接受Op,比如变量的初始化:
init = tf.global_variables_initializer()
sess.run(init)
# 返回值为None
2.feed_dict参数,用于覆盖数据流图中的tensor对象,接受的参数类型为Python的字典对象
  字典的'键'为被覆盖的tensor对象的句柄,'值'可以是各种数据类型,但是必须和被覆盖tensor
  的类型相同或者能够转换为相同类型
import tensorflow as tf
a = tf.add(1, 2)
b = tf.add(a, 10)
sess = tf.Session()
sess.run(b)
13
# 定义一个字典,覆盖tensor a
replace_dict = {a : 20}
sess.run(b, feed_dict=replace_dict)
30
关于回话对象使用结束后需要关闭调用close方法,释放资源sess.close()
# 将Session对象作为上下文管理器来使用,离开作用域,Session对象会自动关闭
with tf.Session() as sess:
    #.......Op,tensor
-----------------------------------
# 也可以像图对象一样被隐式使用
sess = tf.Session()
with sess.as_default():
    a.eval()       # 类似与run(a)
# 但是必须手动关闭
sess.close()

tensorflow中的占位节点

占位节点是用来接收输入值的,它们的作用和tensor对象类似,在创建时不用指定具体的数值,它们的作用是为将要用到的tensor对象预留位置,相当于输入节点

import tensorflow as tf
import numpy as np
# 创建一个占位节点tf.placeholder()
# 第一参数是dtype是必须指定的,
# 第二个参数shape,默认为None,接收任意形状的tensor,长度为2的一阶张量
# 第三个参数name,用来标识这个Op
a = tf.placeholder(tf.int32, shape=[3], name='input')
b = tf.reduce_sum(a, name='sum')
# 在Session对象的run()方法中,通过字典给占位节点传递值
# 在计算b时,在run()方法中,只用给b有依赖的占位节点,覆盖数值
# 没有依赖的节点不需要包含在feed_dict中
sess = tf.Session()
sess.run(b, feed_dict={a: np.array([1, 2, 3], dtype=np.int32)})
6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值