图(graph)是TensorFlow用于表达计算任务的一个核心概念。
Graph
graph被定义为一些operation和tensor的集合。例如,
a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
c = tf.placeholder(tf.float32)
d = a*b+c
e = d*2
该图如下,其中每个圆圈表示一个operation,椭圆到椭圆的边为tensor,箭头的指向表示了这张图operation输入输出tensor的传递关系。
在TensorFlow运行时,Python构建的“图”并不是启动一个session之后始终不变的,TensorFlow先将Python代码描绘的图转换成protocol buffer,再通过c/c++/cuda运行protocol buffer所定义的图。
graphdef
从Python graph中序列化出来的图为graphdef,是由许多protocol buffer组成的。
node {
name: "Placeholder" # 注释:这是一个叫做 "Placeholder" 的node
op: "Placeholder"
attr {
key: "dtype"
value {
type: DT_FLOAT
}
}
attr {
key: "shape"
value {
shape {
unknown_rank: true
}
}
}
}
node {
name: "Placeholder_1" # 注释:这是一个叫做 "Placeholder_1" 的node
op: "Placeholder"
attr {
key: "dtype"
value {
type: DT_FLOAT
}
}
attr {
key: "shape"
value {
shape {
unknown_rank: true
}
}
}
}
node {
name: "mul" # 注释:一个 Mul(乘法)操作
op: "Mul"
input: "Placeholder" # 使用上面的node(即Placeholder和Placeholder_1)
input: "Placeholder_1" # 作为这个Node的输入
attr {
key: "T"
value {
type: DT_FLOAT
}
}
}
以上三个nodedef定义了两个placeholder和一个木