TensorFlow中节点(constant、placeholder、Variable)和张量(tensor)
一、节点
1、TensorFlow中相关概念表:
2、节点概念
TensorFlow用图来表示相关计算任务,图中的节点称为operation,缩写成op。一个节点获得0个或者多个张量(tensor)。图必须会在会话(Session)中被启动,会话将图的节点(op)分发到CPU或GPU之类的设备上,同时提供执行节点(op)的方法,这些方法执行后,将产生的张量(tensor)返回。
3、constant(常量)
constant是tensorflow的常量节点,通过constant方法创建,其是计算图中的起始节点,是传入数据。
创建方式:
cons = tf.constant(value=[1,2],dtype=tf.float32,shape=(1,2),name='testConstant',verify_shape=False)
参数说明:
value:初始值,必填,必须是一个张量(1或[1,2,3]或[[1,2,3],[2,2,3]]或……)。
dtype:数据类型,选填,默认为value的数据类型,传入参数为tensotflow下的枚举值(float32,float64….)。
shape:数据形状,选填,默认为value的shape,设置时不得比value小,可以比value阶数,纬度更高,超过部分按value提供最后一个数字填充。
name:常量,选填,默认值不重复,根据创建顺序为(Const,Const_1,Const_2…….)。
verify_shape:是否验证value的shape和指定shape相符,若设为True则进行验证,不相符时会抛出异常。
import tensorflow as tf
#shape:数据形状,选填,默认为value的shape,设置时不得比value小,可以比value阶数、维度更高,超过部分按value提供最后一个数字填充
constatnValue = tf.constant([1,2,3],shape=[2,3])
#创建一个会话
session = tf.Session()
print(session.run(constatnValue))
#关闭会话
session.close()
4、placeholder(占位符)
placeholder是Tensorflow的占位符节点,由placeholder创建,也是一种常量。是由用户在调用run方法时传递的,也可以将placeholder理解为一种形参。
创建方式:
x = tf.placeholder(dtype=tf.float32,shape=[144,10],name = 'x')
参数说明:
dtype:数据类型,必填,默认为value的数据类型,传入参数为tensorflow下的枚举值(float32,float64…..)。
shape:数据类型,选填,不填则随传入数据的形状自行变动,可以在多次调用中传入不同形状的数据。
name:常量名,选填,默认值不重复,根据创建顺序为(Placeholder,Placeholder_1,Placeholder_2…….).
示例代码:
#placeholder的测试
import tensorflow as tf
import numpy.random as random
#定义两个placeholder
#占位符shape不设时会按传入参数自行匹配
placeholder1 = tf.placeholder(tf.float32)
placeholder2 = tf.placeholder(tf.float32)
#定义数据流图,matmul函数必须对应的矩阵必须是第一个矩阵的列数 = 第二个矩阵的行数
op1 = tf.matmul(placeholder1,placeholder2)
#通过传入初始化的常量给placeholder赋值
constant1 = tf.constant(random.rand(4,5))
constant2 = tf.constant(random.rand(5,5))
with tf.Session() as session:
print(session.run(op1,{placeholder1:session.run(constant1),placeholder2:session.run(constant2)}))
#也可以直接传图张量赋值
print(session.run(op1,{placeholder1:random.rand(2,3),placeholder2:random.rand(3,4)}))
5、Variable(变量)
variable是tensorflow的变量节点,通过Variable方法创建,并且需要传递初始值,在使用前需要通过tensorflow方法进行初始化。
创建方式:
v1 = tf.Variable(tf.zeros([3, 10]), dtype=tf.float64, name='v1')
二、张量(tensor)
1、概念
张量表示从向量空间到实数域的多重线性映射。在TensorFlow中用tensor数据结构来表示所有的数据,计算图中,操作间传递的数据都是tensor。
2、张量的阶和维数(shape)
在TensorFlow中,张量的维数被描述为“阶”,张量以list形式存储。list中有几重中括号,对应的张量就表示几阶。
如test = [[1,2,3],[1,2,3],[1,2,3]],test就是一个二阶张量。一阶张量,相当于一个向量;二阶张量,相当于一个矩阵。
例如,t=[ [1,2,3],[4,5,6],[7,8,9] ]来说,它的shape==>[3,3],shape可以理解成:当脱去最外层的一对中括号后,里面有3个小list,然后每个小list里又有3个元素,所以该张量的shape==>[3,3]。
如[ [1,2,3],[4,5,6] ] 的shape=[2,3](因为当脱去最外层的一对中括号后,里面有2个小list,然后每个小list里又有3个元素,所以该张量的shape==>[2,3]。
又如,[ [ [ [ 2 ], [ 2 ] ] , [ [ 2 ] , [ 2 ] ] , [ [ 2 ] , [ 2 ] ] ] , [ [ [ 2 ] , [ 2 ] ] , [ [ 2 ] , [ 2 ] ] , [ [ 2 ] , [ 2 ] ] ] , [ [ [ 2 ] , [ 2 ] ] , [ [ 2 ] , [ 2 ] ] , [ [ 2 ] , [ 2 ] ] ] , [ [ [ 2 ] , [ 2 ] ] , [ [ 2 ] , [ 2 ] ] , [ [ 2 ] , [ 2 ] ] ] ]的shape==>[4,3,2,1] (因为当脱去最外层的一对中括号后,里面有4个第二大的list,每个第二大的list里又有3个第三大的list,每个第三大的list里有2个第四大的list,每个第四大的list里有1个元素,所以该张量的shape==>[4,3,2,1]。
3、获得TensorFlow中Tensor类型的维度信息
tf.shape(tensor_name)
tf.rank(tensor_name)
三、参考资料
1、https://blog.csdn.net/dd864140130/article/details/71774229
2、https://blog.csdn.net/u012196371/article/details/71036801
3、https://www.cnblogs.com/Vulpers/p/7809276.html