张量,节点,命名理解
在定义静态图的时候,
a = tf.constant([1.0,2.0],name='x')
b = tf.constant([1.0,2.0],name='y')
c = tf.add(a,b,name='nmsl')
print(c)
<tensor>:nmsl:0,shape,dtype)
可以看出,c是一个tensor类型,所以tensor其实代表一个数据流,说白了就是一个节点输出,其中每个tensor的名字为对应节点的名字加:0,0代表该节点的第一个输出tensor.
其实一般一个节点只有一个输出,所以后面基本都是补零,因为如果写个d=tf.add(a,b,name='nmsl'),这个节点被改名字为nmsl_1, 所以d这个tensor的名字就做nmsl_1:0.
总结:<张量> tensor就是指输出的数据,名字就是其对应节点名字加:0。节点(op)包括两种属性:1.name(这个那么可以自己指定,不指定话就被默认把op换成小写的字母作为name). 2.OP(有时也叫type,可以理解为tensorflow中的基本类型,常见的有Add,Mul。。。。。)
注意:如果在同一个命名空间中,如果命名name已经存在,则name会自动的在名字后面补充_1,_2....依次往后添加。
测试代码:
>>> import tensorflow as tf
>>> a=tf.constant([1.0,2.0],name='test1')
>>> b=tf.constant([1.0,2.0],name='test2')
>>> result=a+b
>>> sess=tf.Session()
2019-05-30 19:36:03.027829: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
>>> tf.train.write_graph(tf.get_default_graph(),"./","model.pbtxt")
'./model'
>>> print(result)
Tensor("add:0", shape=(2,), dtype=float32)
>>> sess.close()
>>> result2=tf.multiply(a,b,name="nmsl")
>>> sess=tf.Session()
>>> tf.train.write_graph(tf.get_default_graph(),"./","model.pbtxt")
'./model.pbtxt'
>>> print(result2)
Tensor("nmsl:0", shape=(2,), dtype=float32)
>>> sess.close()
>>> d=tf.multiply(a,b,name="nmsl")
>>> sess=tf.Session()
>>> tf.train.write_graph(tf.get_default_graph(),"./","model.pbtxt")
'./model.pbtxt'
>>> print(d)
Tensor("nmsl_1:0", shape=(2,), dtype=float32)
>>> sess.close()
>>> e=a+b
>>> f=d+a
>>> sess=tf.Session()
>>> tf.train.write_graph(tf.get_default_graph(),"./","model.pbtxt")
'./model.pbtxt'
>>> print(e)
Tensor("add_1:0", shape=(2,), dtype=float32)
>>> print(f)
Tensor("add_2:0", shape=(2,), dtype=float32)
>>> sess.close()
视图网址: