Tensorflow学习——第一章(一)

计算图

Flow-流

Flow–“流”,表达了张量之间通过计算相互转化的过程,tensorflow是一个通过计算图的形式来表述计算的编程系统。Tensorflow中的每一个计算都是计算图上的一个节点,而节点之间的变藐视了计算之间的依赖关系。
在这里插入图片描述

Tensor-张量

在TensorFlow程序中,所有的数据都通过张量的形式来表示。从功能角度,张量可以被简单理解为多维数组。
在张量中并没有真正保存数字,他保存的是如何得到这些数字的计算过程。以加法为例,当运行如下代码时,并不会得到加法的结果,而会得到对结果的引用。

tf.constant是一个计算,这个计算的结果为一个张量,保存在变量a中。

import tensorflow as tf

a=tf.constant([1.0,2.0],name='a')
b=tf.constant([2.0,3.0],name='b')
result=a+b
print(result)

输出:Tensor(“add:0”, shape=(2,), dtype=float32)

可以看出,张量的计算结果不是一个具体的数字,而是一个张量的结构,其中保存了张量的三个属性:名字name,维度shape,类型type。
每个张量会有一个唯一的类型,tensorflow会对参与运算的张量进行类型的检查,当发现类型不匹配时会报错。

a=tf.constant([1,2],name='a')
b=tf.constant([2.0,3.0],name='b')

ValueError: Tensor conversion requested dtype int32 for Tensor with dtype float32: ‘Tensor(“b:0”, shape=(2,), dtype=float32)’
如果将第一个加数指定类型,则不会报错。一般建议通过指定dtype 来指出变量或常数的类型。

a=tf.constant([1,2],name='a',dtype=tf.float32)

TensorFlow运行模型——会话

会话(session)——用于执行定义好的运算。
会话拥有并管理TensorFlow程序运行时的所有资源。但计算完成之后需要关闭会话来帮助系统回收资源,否则可能出现资源泄漏问题。

# 创建一个会话
sess=tf.Session()
# 使用创建好的会话来得到关心的运算的结果。
print(sess.run(result))
#关闭会话
sess.close()

使用上下文管理器,可以防止因为异常退出时资源的释放问题。

# 创建一个会话,并通过python中的上下文管理器来管理这个会话
# 不需要调用sess.close()来关闭会话,上下文管理器退出时关闭会话
with tf.Session() as sess:
	print(sess.run(result))
# 交互式环境下的构建默认会话
sess=tf.InteractiveSession()
print(result.eval())
sess.close()

通过ConfigProto Protocol Buffer来配置需要生成的会话。
通过ConfigProto配置会话,可以配置类似并行的线程数、GPU分配策略、运算超时时间等参数。

第一个参数,allow_soft_placement是一个布尔型的参数,为True时,可以将无法在GPU运算、GPU资源不足、运算包含对CPU运算结果的引用等情况下的运算放到CPU上进行。
第二个参数,log_device_placement是一个布尔型的参数,为True时,日志中将会记录每个节点被安排在了那个设备上以方便调试。

# 通过ConfigProto配置会话
config=tf.ConfigProto(allow_soft_placement=True,log_device_placement=True)
sess1=tf.InteractiveSession(config=config)
sess2=tf.Session(config=config)

猜你喜欢

转载自blog.csdn.net/m0_38120677/article/details/84304675