TensorFlow学习记录三(会话Session)

Jan 22, 2017


在解析上一段代码之前,我们来看一个官方文档里面更简单的一个例子。

image

粗略翻译一下便是这个意思:

tf.Session类是用来运行TF操作的。

一个Session对象囊括了执行操作对象的环境,并且Tensor的操作会被执行,例如:

# Build a graph
a = tf.constant(5.0)
b = tf.constant(6.0)
c = a * b

# launch the graph in session
sess = tf.Session()

# Evaluate the Session \'c\'
print sess.run(c)

这几行代码的意思很简单,首先创造了两个常量a和b,分别赋予5.0和6.0,再创造一个变量c,使其等于a * b

关于注释中的Graph,是前两节没有讲的,但是初学TF是会看到很多Graph的字样的。

那是因为TF就是使用Graph来表示计算任务的,并且要在Session中执行图。

于是下面我们就启动一个session对象,并且在print语句中执行sess.run()语句去执行c

继续翻译:

一个Session可能占用计算资源,就像变量,queue(队列?),和readers一样。所以释放计算资源是非常重要的。

为了达到释放计算资源的目的,可以使用close()这样的显式方法,或者在隐式释放的代码中去用session,比如下面的代码

# Using the close() method
sess = tf.Session()
sess.run()
sess.close()

#Using the context manager
with tf.Session() as sess:
	sess.run()

其中第一种是显式释放,第二种是隐式释放。

关于Session的内容也就这么多吧,然后看一看上次留下的代码。

import tensorflow as tf 

matrix1 = tf.constant([[3, 3]])
matrix2 = tf.constant([[2], 
	                   [2]])

product = tf.matmul(matrix1, matrix2)      # matrix multiply

# method 1
# sess = tf.Session()
# result = sess.run(product)

# print(result)
# sess.close()

# method 2
with tf.Session() as sess:
	result2 = sess.run(product)
	print(result2)
# auto close()

没错,机器学习的计算中有着大量的矩阵运算,这个例子和第一个例子是很像的,只不过将直接的四则运算变成了矩阵运算。

前几行产生了两个常量矩阵,并且将它们的乘积保存在了product中。

然后我们要弄一个Session对象,并且运行了product。

最后我们完成了我们的目的,于是要释放运算资源,有两种方法。

method1下面是显式的释放,method2下面是隐式的释放,其实也就这么简单了。

是不是感觉内容太少了点,不急不急,我们慢慢来嘛。

老规矩,下次说一说TF中的变量:

import tensorflow as tf 

input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)

output = tf.mul(input1, input2)

with tf.Session() as sess:
print(sess.run(output, feed_dict = {input1: [7.], input2: [2.]}))