绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
TensorFlow 的计算模型、数据模型和运行模型
2019-10-09 09:54:55

TensorFlow 读书笔记之一

TensorFlow 的计算模型、数据模型和运行模型

(1)计算模型-计算图

在 TensorFlow 中,张量(Tensor)可以被简单地理解为多维数组。如果说 TensorFlow 的个词 Tensor 表明了它的数据结构,那么 Flow 则体现了它的计算模型。Flow 翻译成中文是“流”,它直观地表达了张量之间通过计算相互转化的过程。 TensorFlow 是一个通过计算图的形式来表述计算的编程系统 。TensorFlow中的每一个计算都是计算图上的一个节点,而节点之间的边描述了计算之间的依赖关系。

如果一个运算的输入依赖于另 一个运算的输出,那么这两个运算有依赖关系。

上图是TensorFlow构建的一个计算图。所有 TensorFlow 的程序都可以通过类似上图所示的计算图的形式来表示,这就是 TensorFlow 的基本计算模型。

TensorFlow程序一般分为两个阶段:

定义计算图所有的计算;

在session中执行计算;

在TensorFlow程序中,系统会自动维护一个默认的计算图,可以通过tf.get_default_graph()函数获取。

import tensorflow as tf

v1 = tf.constant(1, name="value1")

v2 = tf.constant(2, name="value2")

add_op = tf.add(v1, v2, name="add_op_name")

print(v1)

# 设置写入的文件夹

summary_writer = tf.summary.FileWriter("./calc_graph")

# 获取默认的图

graph = tf.get_default_graph()

summary_writer.add_graph(graph)

# 将图结构写入文件

summary_writer.flush()

# 获取图中的所有操作

operations = graph.get_operations()

print("运算操作:%d" % len(operations))

print("operations:")

for op in operations:

print(op)

输出结果:

上述输出结果中,可以看到3个操作,分别是value1、value2和add_op_name。

还可以借助TensorBoard工具来可视化这些运算操作,以及运算操作之间的依赖。

上述代码将图结构写入到 calc_graph 文件夹中,在命令行执行如下命令:

tensorboard --logdir=./calc_graph

然后在浏览器中访问:http://localhost:6006,就会看到图结构示意图。

(2)数据模型-张量

张量是 TensorFlow 管理数据的形式。

TensorFlow 中基本的单位是常量(Constant)、变量(Variable)和占位符(Placeholder)。常量定义后值和维度不可变,变量定义后值可变而维度不可变。在神经网络中,变量一般可作为储存权重和其他信息的矩阵,而常量可作为储存超参数或其他结构信息的变量。

在TensorFlow中,所有的数据都通过张量的形式来表示。

零阶张量表示标量(scalar),也就是一个数;

阶张量为向量(vector),也就是一个一维数组;

第n阶张量可以理解为一个n为数组;

但是张量在TensorFlow中并不是直接采用数组的形式,它只是对TensorFlow 中运算结果的引用。

import tensorflow as tf

v1 = tf.constant(1, name="value1")

v2 = tf.constant(2, name="value2")

add_op = tf.add(v1, v2, name="add_op_name")

print(v1)

输出结果:Tensor("value1:0", shape=(), dtype=int32)

一个张量中主要保存了3个属性:

名字(name);

维度(shape);

类型(type);

(3)执行模型-会话(Session)

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

# 在会话中执行操作

with tf.Session() as sess:

# 执行运算

result = sess.run(add_op)

print("result=%.0f" % result)

完整代码可以访问:

https://notebooks.azure.com/rickiechina/projects/tensorflowtutorial/html/Simple.ipynb

分享好友

分享这个小栈给你的朋友们,一起进步吧。

应用开发
创建时间:2020-06-17 15:31:04
应用软件开发是指使用程序语言C#、java、 c++、vb等语言编写,主要是用于商业、生活应用的软件的开发。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 栈栈
    专家
戳我,来吐槽~