第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > tensorflow 基础: static shape VS Dynamic shape get_shape VS tf.shape() reshape VS set_shape

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

时间:2023-09-20 20:17:57

相关推荐

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是否符合要求。

参考:/qq_21949357/article/details/77987928

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。