基于tf.shape(tensor)和tensor.shape()的区别说明
#tf.shape(tensor)和tensor.shape()的区别
a=tf.zeros([4,5,4,5,6]) print(type(a.shape)) print(a.shape.ndims)#多少个维度 print(a.shape.as_list())#返回列表 print(type(tf.shape(a))) print(type(tf.shape(a)[0])) b=a.shape.as_list() c=tf.shape(a) b[1]=tf.shape(a)[1] print(b) sess=tf.Session() d=sess.run(c) print(d)
outputs:5 [4,5,4,5,6] [4, ,4,5,6] [45456]
其中tf.shape(tensor)使用的是动态的,即必须要在session中运行后才能显示出来,但是tensor.shape()是静态的,即通过定义的shape可以惊天的运行出来。
原因:在我们定义的时候,比如进行placeholder的时候我们可能会定义某些维度为None,在静态的时候是看不出来的,只能在运行的时候找到维度。
**使用:**可以在获得某些tensor的维度的时候进行检验,防止维度为None。
补充知识:tensorflow.python.framework.tensor_shape.TensorShape类
TensorShape是tensorflow中关于张量shape的类(class).
使用示例如下:
importtensorflow.compat.v1astf fromtensorflow.python.frameworkimporttensor_shape fromtensorflow.python.frameworkimportconstant_op tensor_test1=[10,10,10] tensor_test2=[None,10,10] p1=tensor_shape.as_shape(tensor_test1)#得到的是一个类实例,该类实例包含一个属性,是tensor_test1的value const=constant_op.constant(p1.as_list()) print("type(p1)=",type(p1)) print("p1=",p1)#使用p1时会自动调用p1中的value属性 print("p1.is_fully_defined()=",p1.is_fully_defined())#is_fully_defined是TensorShape类的一个内部函数 print("p1.ndims=",p1.ndims)#ndims也是TensorShape的一个属性值 print("p1.as_list()=",p1.as_list())#把TensorShape的value属性转换成python中的list类型 print("const=",const)
结果如下:
type(p1)=p1=(10,10,10) p1.is_fully_defined()=True p1.ndims=3 p1.as_list()=[10,10,10] const=Tensor("Const:0",shape=(3,),dtype=int32)
以上这篇基于tf.shape(tensor)和tensor.shape()的区别说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。