TensorFlow基础二(Shape)
Posted ratels
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TensorFlow基础二(Shape)相关的知识,希望对你有一定的参考价值。
static (inferred) shape
和dynamic (true) shape
,其中static shape
用于构建图,由创建这个tensor的op推断(inferred)得来,故又称inferred shape
。在实际运行中,常常出现图中tensor的具体维数不确定而用placeholder代替的情况,因此static shape未必是已知的。tensor在训练过程中的实际维数被称为dynamic shape,而dynamic shape是一定的。如果该tensor的static shape
未定义,则可用tf.shape()
来获得其dynamic shape
。1、区分x.get_shape()
和x = tf.shape(x)
x.get_shape()
返回static shape
,只有tensor有这个方法,返回是元组。x.get_shape().as_list()
是一个常用方法,经常被用于将输出转为标准的python list。
关于static shape
的样例示范如下:
1 x = tf.placeholder(tf.int32, shape=[4]) 2 print x.get_shape() 3 # ==> ‘(4,)‘
get_shape()
返回了x的静态类型,4代指x是一个长度为4的向量。需要注意,get_shape()
不需要放在session中即可运行。
与get_shape()
不同,tf.shape()
的示例代码如下:
1 y, _ = tf.unique(x) 2 print y.get_shape() 3 # ==> ‘(?,)‘ 4 sess = tf.Session() 5 print sess.run(y, feed_dict={x: [0, 1, 2, 3]}).shape 6 # ==> ‘(4,)‘ 7 print sess.run(y, feed_dict={x: [0, 0, 0, 0]}).shape 8 # ==> ‘(1,)‘
通过此代码体会两种shape的不同,需要注意tf.shape()
需要在session中运行。
2、区分x.set_shape()
和tf.reshape()
set_shape更新tensor的static shape
,不改变dynamic shape
。reshape创建一个具备不同dynamic shape
的新的tensor。(其实从官方说明中可以看出,这两个主要是适用场合的区别,前者用于更新图中某个tensor的shape,而后者则往往用于动态地创建一个新的tensor。)
参考:https://github.com/vahidk/EffectiveTensorflow;https://www.jianshu.com/p/2b88256ad206;https://blog.csdn.net/qq_21949357/article/details/77987928;
以上是关于TensorFlow基础二(Shape)的主要内容,如果未能解决你的问题,请参考以下文章
Tensorflow+keras解决cuDNN launch failure : input shape ([32,2,8,8]) [[{{node sequential_1/batch_nor(代码
Tensorflow+keras解决cuDNN launch failure : input shape ([32,2,8,8]) [[{{node sequential_1/batch_nor(代码