我是靠谱客的博主 称心小霸王,最近开发中收集的这篇文章主要介绍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

最后

以上就是称心小霸王为你收集整理的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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部