Tensorflow之张量和会话

xiaoxiao2021-02-28  76

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()
转载请注明原文地址: https://www.6miu.com/read-2626907.html

最新回复(0)