TensorFlow基础二(Shape)

Posted ratels

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TensorFlow基础二(Shape)相关的知识,希望对你有一定的参考价值。

首先说明tf中tensor有两种shape,分别为static (inferred) shapedynamic (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 基础学习七:模型的持久化

详细:tensorflow构建神经网络基础概念梳理

tensorflow多层CNN代码分析

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(代码

tensorflow如何动态获取shape