本文主要是介绍Tensorflow之张量和会话,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.张量的概念
Tensorflow的名字表明了张量的含义。在tensorflow中,所有数据通过张量形式表示。张量可以理解为多维数组。零阶张量表示标量,也就是一个数;一阶张量为向量,一维数组;n阶张量可以理解为n维数组。
tensorflow中,张量并没有保存数字,只是表示数字的计算过程,是对tensorflow中运算结果的引用。
import tensorflow as tf
a = tf.constant([1, 2], name="a", dtype=tf.float32)
b = tf.constant([2.0, 3.0], name="b")
result = tf.add(a, b, name='add')
print(result) # Tensor("add:0", shape=(2,), dtype=float32)
上面代码中,并不会得到加法的结果,只能得到引用,保存在result中。
引用的类型表示为: Tensor("add:0", shape=(2,), dtype=float32)
张量结构保存了三个属性:名字(name)、维度(shape)、类型(type)
张量的第一个属性除了是该张量的唯一标识符外,还表示了张量的计算方式。上面代码表明是通过加法计算得到。张量的名字通过"node:src_output"的形式给出,其中node为节点的名称,src_output表示当前张量来自该节点的第几个输出。如add:0说明该张量节点名称为add,第一个输出。
张量的第二个属性shape表明了他的维度。shape=(2,)说明该张量是一个一维数组,长度为2.
张量的第三个属性表明了该张量的数据类型。运行时,Tensorflow会对所有张量进行数据类型检查,发现类型不匹配时会报错。如下面这段代码会报错:
import tensorflow as tf
a = tf.constant([1, 2], name="a")
b = tf.constant([2.0, 3.0], name="b")
result = tf.add(a, b, name='add')
print(result) # Tensor("add:0", shape=(2,), dtype=float32)
去掉张量a后面的小数点后类型不一致,则报错,可以在a后显示添加数据类型:
import tensorflow as tf
a = tf.constant([1, 2], name="a", dtype=tf.float32)
b = tf.constant([2.0, 3.0], name="b")
result = tf.add(a, b, name='add')
print(result) # Tensor("add:0", shape=(2,), dtype=float32)
2.张量的使用
张量的使用主要分为两大类:
第一类用途时对中间结果的引用,提高代码的可读性。如下代码:
# 使用张量记录中间结果
a = tf.constant([1.0, 2.0], name="a")
b = tf.constant([2.0, 3.0], name="b")
result = a + b# 直接计算向量的和,可读性差
result=tf.constant([1.0, 2.0], name="a")+tf.constant([2.0, 3.0], name="b")
第二类情况是计算图构造玩完成后,张量可以用来获取计算结果,得到真实的数字。虽然张量本身没有存储具体的数字,但是通过会话(Session)就可以得到这些具体的数字。如下代码:
# 使用张量记录中间结果
a = tf.constant([1.0, 2.0], name="a")
b = tf.constant([2.0, 3.0], name="b")
result = a + bwith tf.Session() as sess:tf.initialize_all_variables().run()
print(sess.run(result))
3.会话
Tensorflow使用会话(Session)来执行定义好的计算,其拥有并管理程序运行时的所有资源。当计算完成时,我们需要关闭会话来帮助系统回收资源,否则就可能资源泄漏。在Tensorflow中使用会话的方式有两种:
第一种需要自己生成会话和关闭会话,代码如下:
sess = tf.Session() # 创建一个会话
print(sess.run(result)) # 使用会话获得结果
sess.close() # 关闭会话,释放资源
使用这种方式需要最后调用sess.Close()函数关闭会话,否则可能存在内存泄漏的问题。
第二种是通过Python的上下文管理器来使用会话,代码如下:
with tf.Session() as sess:tf.initialize_all_variables().run()print(sess.run(result))
此种方式不需要调用Session.close()函数来关闭会话,当上下文退出时会自动关闭会话和释放资源。
此外,Tensorflow不会自动生成默认的会话,需要手动指定。当默认的会话被指定后可以通过eval()函数获取张量的值,代码如下:
sess = tf.Session()
with sess.as_default():print(result.eval())
使用tf.InteractiveSession()也可以自动生成默认的会话:
sess = tf.InteractiveSession()
print(result.eval())
sess.close()
这篇关于Tensorflow之张量和会话的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!