TensorFlower图的结构

一、TensorFlower图的结构

Tensorflow有一下几个简单的步骤:

  • 使用 tensor 表示数据.
  • 使用图 (graph) 来表示计算任务.
  • 在会话(session)中运行图s

TensorFlow程序通常被组织成一个构建阶段和一个执行阶段. 在构建阶段, op的执行步骤被描述成一个图. 在执行阶段, 使用会话执行执行图中的op。

构建图

node1 = tf.constant(3.0, tf.float32)
node2 = tf.constant(4.0)
print(node1, node2)

最终的打印声明生成

Tensor("Const:0", shape=(), dtype=float32) Tensor("Const_1:0", shape=(), dtype=float32)

构建图的第一步, 是创建源 op (source op). 源 op 不需要任何输入, 例如 常量 (Constant). 源 op 的输出被传递给其它 op 做运算.TensorFlow Python 库有一个默认图 (default graph), op 构造器可以为其增加节点. 这个默认图对 许多程序来说已经足够用了.

默认Graph值始终注册,并可通过调用访问 tf.get_default_graph()

import tensorflow as tf

# 创建一个常量 op, 产生一个 1x2 矩阵. 这个 op 被作为一个节点,加到默认图中.构造器的返回值代表该常量 op 的返回值.
matrix1 = tf.constant([[3., 3.]])

# 创建另外一个常量 op, 产生一个 2x1 矩阵.
matrix2 = tf.constant([[2.],[2.]])

# 创建一个矩阵乘法 matmul op , 把 'matrix1' 和 'matrix2' 作为输入.返回值 'product' 代表矩阵乘法的结果.
product = tf.matmul(matrix1, matrix2)

print tf.get_default_graph(),matrix1.graph,matrix2.graph

重要注意事项:此类对于图形构造不是线程安全的。所有操作都应从单个线程创建,或者必须提供外部同步。除非另有说明,所有方法都不是线程安全的

在会话中启动图

启动图的第一步是创建一个Session对象,如果无任何创建参数,会话构造器将启动默认图。

调用Session的run()方法来执行矩阵乘法op, 传入product作为该方法的参数,会话负责传递op所需的全部输入,op通常是并发执行的。

# 启动默认图.
sess = tf.Session()

# 函数调用 'run(product)' 触发了图中三个 op (两个常量 op 和一个矩阵乘法 op) 的执行.返回值 'result' 是一个 numpy `ndarray` 对象.
result = sess.run(product)
print result

# 任务完成, 关闭会话.
sess.close()

Session对象在使用完后需要关闭以释放资源,当然也可以使用上下文管理器来完成自动关闭动作。

OP

计算图中的每个节点可以有任意多个输入和任意多个输出,每个节点描述了一种运算操作(operation, op),节点可以算作运算操作的实例化(instance)。一种运算操作代表了一种类型的抽象运算,比如矩阵乘法、加法。tensorflow内建了很多种运算操作,如下表所示:

类型示例
标量运算Add、Sub、Mul、Div、Exp、Log、Greater、Less、Equal
向量运算Concat、Slice、Splot、Constant、Rank、Shape、Shuffle
矩阵运算Matmul、MatrixInverse、MatrixDeterminant
带状态的运算Variable、Assign、AssignAdd
神经网络组件SoftMax、Sigmoid、ReLU、Convolution2D、MaxPooling
存储、恢复Save、Restore
队列及同步运算Enqueue、Dequeue、MutexAcquire、MutexRelease
控制流Merge、Switch、Enter、Leave、NextIteration

feed

临时替代图中的任意操作中的tensor可以对图中任何操作提交补丁,直接插入一个 tensor。feed 使用一个 tensor 值临时替换一个操作的输入参数,从而替换原来的输出结果

二、图

tf.Graph

一个图包含一组表示 tf.Operation计算单位的对象和tf.Tensor表示操作之间流动的数据单元的对象。默认Graph值始终注册,并可通过调用访问 tf.get_default_graph。

a = tf.constant(1.0)
assert c.graph is tf.get_default_graph()

图的其它属性和方法

图是一个类,当然会有它自己属性和方法

as_default()返回一个上下文管理器,使其成为Graph默认图形。

如果要在同一过程中创建多个图形,则应使用此方法。为了方便起见,提供了一个全局默认图形,如果不明确地创建一个新的图形,所有操作都将添加到此图形中。使用该with关键字的方法来指定在块的范围内创建的操作应添加到此图形中。

g = tf.Graph()
with g.as_default():
  a = tf.constant(1.0)
  assert c.graph is g

三、会话

tf.Session运行TensorFlow操作图的类,一个包含ops执行和tensor被评估, 注意使用Session的时候可以自动给关闭哦

a = tf.constant(5.0)
b = tf.constant(6.0)
c = a * b
sess = tf.Session()
print(sess.run(c))

在开启会话的时候指定图

with tf.Session(graph=g) as sess:

释放资源会话拥有很多的资源,在不需要的时候,要及时释放出去

# 使用close手动关闭
sess = tf.Session()
sess.run(...)
sess.close()

# 使用上下文管理器
with tf.Session() as sess:
  sess.run(...)

四、会话的run方法

run(fetches, feed_dict=None, options=None, run_metadata=None)

运行ops和计算tensor

  • fetches 可以是单个图形元素,或任意嵌套列表,元组,namedtuple,dict或OrderedDict
  • feed_dict 允许调用者覆盖图中指定张量的值

如果a,b是其它的类型,比如tensor,同样可以覆盖原先的值

a = tf.placeholder(tf.float32, shape=[])
b = tf.placeholder(tf.float32, shape=[])
c = tf.constant([1,2,3])

with tf.Session() as sess:
    a,b,c = sess.run([a,b,c],feed_dict={a: 1, b: 2,c:[4,5,6]})
    print(a,b,c)

错误

  • RuntimeError:如果它Session处于无效状态(例如已关闭)。
  • TypeError:如果fetches或feed_dict键是不合适的类型。
  • ValueError:如果fetches或feed_dict键无效或引用 Tensor不存在。

五、其它属性和方法

graph

返回本次会话中的图

as_default()

返回使此对象成为默认会话的上下文管理器。

获取当前的默认会话,请使用 tf.get_default_session

c = tf.constant(..)
sess = tf.Session()

with sess.as_default():
  assert tf.get_default_session() is sess
  print(c.eval())

注意: 使用这个上下文管理器并不会在退出的时候关闭会话,还需要手动的去关闭

c = tf.constant(...)
sess = tf.Session()
with sess.as_default():
  print(c.eval())
# ...
with sess.as_default():
  print(c.eval())

sess.close()

csdn不定期打包发送,微信每日一篇,快乐学习,赢在中国
欢迎大家关注这个微信公众号,尊重原创,转载请注明出处
在这里插入图片描述

### Ubuntu 上安装 TensorFlow 为了在Ubuntu操作系统上成功部署TensorFlow机器学习框架,可以遵循一系列特定的操作流程。考虑到操作系统的差异,在基于Linux的环境下设置开发环境通常更为简便高效。 #### 准备工作 确保已更新系统包列表并升级现有软件至最新版本[^1]: ```bash sudo apt-get update && sudo apt-get upgrade -y ``` #### 安装 Python 及 pip 工具 由于 TensorFlow 支持多种编程语言接口,但在Python中的应用最为广泛,因此建议先确认是否已经安装了适当版本的Python解释器以及pip工具。对于大多数情况而言,推荐使用Python 3.x 版本。 如果尚未安装,则可以通过以下命令完成安装: ```bash sudo apt install python3-pip python3-dev ``` #### 创建虚拟环境(可选) 虽然不是强制性的步骤,但是强烈建议为项目创建独立的Python虚拟环境,这有助于避免不同项目的依赖冲突问题。这里以`venv`模块为例说明如何建立新的虚拟环境: ```bash python3 -m venv tf_venv source tf_venv/bin/activate ``` 激活后的提示符前会出现`(tf_venv)`字样表示当前处于该虚拟环境中。 #### 使用 Pip 安装 TensorFlow 一旦准备工作完毕,就可以利用pip来安装所需的TensorFlow库文件。对于CPU-only版本来说,执行下面这条简单的指令即能搞定全部事宜;而对于希望启用GPU加速支持的情况,则需额外注意CUDA Toolkit与cuDNN SDK的选择匹配关系[^4]。 针对仅含CPU的支持,输入如下命令进行安装: ```bash pip install --upgrade tensorflow ``` 若要获取带有GPU优化特性的完整版TensorFlow,请参照官方文档指导挑选兼容硬件规格的具体发行号,并据此调整相应的安装语句。一般情况下,默认选项应当适用于多数场景下的需求。 #### 验证安装成果 最后一步是要验证新近安设好的TensorFlow能否正常运作。打开Python终端或者编写一小段测试程序来进行简单检验是个不错的方法。比如尝试打印出TensorFlow版本信息作为初步检测手段之一: ```python import tensorflow as tf print(tf.__version__) ``` 上述过程涵盖了从准备阶段直至最终校验在内的整个于Ubuntu平台之上构建TensorFlow运行时所需的关键环节概述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值