TensorFlow中,会话(Session)表示计算图一次执行的上下文,也被称为TensorFlow运行时。
TensorFlow应用大致可以分为2个部分:
- 使用计算图定义神经网络结构
- 创建会话运行神经网络(计算图)
我们将通过一个例子来加深理解。
示例
本例完成以下操作:
- 创建两个张量常量
- 创建一个操作
- 打开一个会话
- 打印结果
import tensorflow as tf
## 创建2个常量
x = tf.constant([2])
y = tf.constant([4])
## 定义一个操作
multiply = tf.multiply(x, y)
## 创建会话执行操作
# 打开一个会话,所有操作都将在会话中进行
sess = tf.Session()
# 执行定义好的操作
result_1 = sess.run(multiply)
# 打印结果
print(result_1)
# 关闭会话
sess.close()
输出
[8]
结果是8,即x和y的乘积。
创建会话的另一种方法是在with
块中,优点是自动关闭会话。
with tf.Session() as sess:
result_2 = multiply.eval()
print(result_2)
输出
[8]
可以在会话中,打印张量的值。
## 检查之前创建的张量
sess = tf.Session()
print(sess.run(x))
print(sess.run(y))
sess.close()
输出
[2]
[4]
global_variables_initializer初始化
变量中的默认值是随机值。要使用变量,在会话中,需要调用object tf.global_variables_initializer()
,根据定义变量时设置的初始化器(initializer
),来初始化变量的值。
import tensorflow as tf
# 创建一个变量
var = tf.get_variable("var", [1, 2])
# 创建一个变量,并把变量中的元素值初始化为0
var_init_1 = tf.get_variable("var_init_1", [1, 2], dtype=tf.int32, initializer=tf.zeros_initializer)
# 创建一个变量,并使用矩阵常量初始化变量
tensor_const = tf.constant([[10, 20],[30, 40]])
var_init_2 = tf.get_variable("var_init_2", dtype=tf.int32, initializer=tensor_const)
sess = tf.Session()
# 初始化
sess.run(tf.global_variables_initializer())
print(sess.run(var))
print(sess.run(var_init_1))
print(sess.run(var_init_2))
sess.close()
输出
[[ 1.2669944 -0.07566607]]
[[0 0]]
[[10 20]
[30 40]]
占位符与feed_dict
要为占位符传值,可以在会话中使用feed_dict
参数。
import tensorflow as tf
# 导入numpy库
import numpy as np
# 创建一个占位符
data_placeholder_b = tf.placeholder(tf.float32, name = "data_placeholder_b")
# 声明一个操作,对占位符中的数据,作平方运算
power_a = tf.pow(data_placeholder_b, 2)
with tf.Session() as sess:
# 创建一个随机的数据数组
data = np.arange(0, 10, 2, np.float)
print(data)
# 向占位符提供数据
result = sess.run(power_a, feed_dict={data_placeholder_b: data})
print(result)
输出
[0. 2. 4. 6. 8.]
[ 0. 4. 16. 36. 64.]