tensorflow 基础: static shape VS Dynamic shape, get_shape VS tf.shape() , reshape VS set_shape

#########################################################################################

1) 概念:static shape  与 dynamic shape

    在tensorflow中构建的图中的每个节点的tensor有两个shape: static shape 和 dynamic shape.

     static shape: 不用运行图也能获得的shape。是tensor的固有属性,可能是未知的。可以通过人为设定,补全static shape的信息。不论图的输入是什么,static shape 不为所动。

    dynamic shape:当图运行起来以后,随着tensor在图中的流动,可以根据图的结构推断图上每一个节点上的tensor的具体shape,这个shape 称为动态shape。一定是可知的。随着图的输入的shape的不同,图中的tensor的dynamic shape会发生变化。

  如果图中的某个节点上的tensor的static shape 是已知,那么当图运行起来后,该tensor得到的dynamic shape 一定要与static shape 一致,否则会报错。

#############################################################################################

2) 如何获得tensor的shape:x1.get_shape()与tf.shape(x1)

    令x1是图上的一个节点上的张量,那么:

    shape1 = x1.get_shape()  : 得到的shape1是一个tuple。 不能由tensorflow直接利用。通常用于提取 static shape.

    shape2 = tf.shape(x1) : 得到的shape2是一个tf.tensor,需要通过sess.run(shape2)来获取具体数值。通常用于提取dynamic shape.

#################################################################################################

3) 如何设置tensor的shape:x1.set_shape()与tf.reshape(x1)

   令x1是图上的一个节点上的张量,那么:

    x1.set_shape(shape1) : 当x1的shape未知时,用set_shape设置x1的shape,通常针对静态shape,因为只有静态shape才有可能是未知。当x1的static shape已知时,如果shape1与x1的static shape不一致,会报错。==》 set_shape只用于补全tensor的静态shape信息,方便后续使用该shape信息,本身并不能改变shape.  ==》PS:如果后续获得的动态shape与set_shape设置的静态shape不一致会报错。

  x2 = tf.reshape(x1,shape2) x2是生成的一个新的张量,由x1中的元素组成,shape=shape2.能成功运行的条件是x1中元素的个数与shape2容纳的元素个数相等。如果后续用x2代替x1使用,相当于既对x1执行了set_shape操作,又改变了x1的shape.

##################################################################################################

总结:

a) 通常"tf."的操作都会返回一个张量。(个人总结的规律,未做广泛验证)

b)set_shape通常与tf.placeholder结合使用,因为tf.placeholder并不限制输入的tensor的shape,可以通过set_shape限制输入的tensor的shape,可以方便后面使用输入的tensor的shape的同时,还可以检查执行feed_dict时,传入的数据shape是否符合要求。

 

参考:https://blog.csdn.net/qq_21949357/article/details/77987928

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值