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 + b

with 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()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值