基本概念
几句定理,按照该思路可以较为形象的构建网络模型
- 用 G r a p h Graph Graph 表示 计算
- 在 S e s s i o n Session Session 中 执行 G r a p h Graph Graph
- 用 T e n s o r Tensor Tensor 表示 数据
- 用 V a r i a b l e s Variables Variables 维护 状态
- 用 f e e d feed feed 和 f e t c h fetch fetch 传送 数据
- 以 O p e r a t i o n Operation Operation 作为 节点
简单解释
可以通过一个简单操作对定理进行解释
比如说,我们需要对两个数进行一个加法操作,其中第一个加数需要自己输入。
显然,可以通过下图
G
r
a
p
h
Graph
Graph 表示这个计算
按照定理,我们用 T e n s o r Tensor Tensor 表示数据,并用 V a r i a b l e s Variables Variables 维护状态*,由于是一维数据,也就是标量,所以可以这么描述 n u m 1 num1 num1
num1 = tf.Variables(2)
那么,作为要输入的 n u m 2 num2 num2,则需要用到传输数据的 f e e d feed feed 操作,在 f e e d feed feed 之前,需要对 n u m 2 num2 num2 进行一个定义,并用 p l a c e h o l d e r placeholder placeholder 进行占位,这里是整型,所以 d t y p e = i n t 32 dtype=int32 dtype=int32
num2 = tf.placeholder("int32")
同样,作为节点的两个 n u m num num 同样也是两个 O p e r a t i o n Operation Operation,可以简单地理解为赋值操作,作为最好理解的 a d d add add o p e r a t i o n operation operation 节点,则可以这么描述
add = tf.add(num1, num2)
不难理解,这些节点中都保存着对应的数据, n u m 1 → 2 num1 → 2 num1→2, n u m 2 → 4 num2 → 4 num2→4, a d d → 6 add → 6 add→6,这些都数值可以通过 f e t c h fetch fetch获得
经过上述操作,已经完成了图(计算)的构建,现在需要在
S
e
s
s
i
o
n
Session
Session 中执行计算
首先需要建立一个
S
e
s
s
i
o
n
Session
Session,有两种建立方式,和文件读取一样
sess = tf.Session()
# todo:
sess.close()
with tf.Session() as sess:
# todo:
这里如果是tensorflow2,则需要
sess = tf.compat.v1.Session()
在建立了 S e s s i o n Session Session 后,需要有状态初始化的操作,使得 n u m 1 = 2 , n u m 2 = 4 num1 = 2, num2 = 4 num1=2,num2=4
init = tf.global_variables_initializer()
在 S e s s i o n Session Session 中,对节点的运行,通过 r u n run run 函数来进行,进行后自动返回可以 f e t c h fetch fetch 的数值,其中,对于 a d d add add 操作中,由于涉及使用了占位符的 n u m 2 num2 num2,需要使用 f e e d feed feed 操作对其进行赋值,这里用字典的形式进行操作。
sess.run(init)
sum = sess.run(add, feed_dict={num2: 4})
# sum = 6
这里放一下完整的代码
import tensorflow as tf
num1 = tf.Variable(2)
num2 = tf.placholder("int32")
add = tf.add(num1, num2)
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
sum = sess.run(add, feed_dict={num2: 4})
print(sum)
*如果不需要对 n u m 1 num1 num1 进行修改,就不需要维护状态了,只需要表示数据,所以也可以用
num1 = tf.constant(2)