TensorFlow基础二(Shape)
2024-10-08 13:59:30
首先说明tf中tensor有两种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
的样例示范如下:
x = tf.placeholder(tf.int32, shape=[4]) print x.get_shape() # ==> '(4,)'
get_shape()
返回了x的静态类型,4代指x是一个长度为4的向量。需要注意,get_shape()
不需要放在session中即可运行。
与get_shape()
不同,tf.shape()
的示例代码如下:
y, _ = tf.unique(x) print y.get_shape() # ==> '(?,)' sess = tf.Session() print sess.run(y, feed_dict={x: [0, 1, 2, 3]}).shape # ==> '(4,)' print sess.run(y, feed_dict={x: [0, 0, 0, 0]}).shape # ==> '(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;
最新文章
- HDU 2010
- u-boot移植总结(四)u-boot-2010.09框架分析
- LightOJ1257 Farthest Nodes in a Tree (II)(树的点分治)
- CoreAnimation 核心动画二 锚点
- HW5.3
- documentElement vs body区别
- CSS3知识点整理(一)----基本样式
- Xamarin Android绑定微信SDK
- springMVC中数据流解析与装载
- MySQL使用root权限创建用户并授权
- SVG的学习(34—36)
- Impala系列:Impala查询优化
- Ajax发送请求,并接受字符串
- VMware NAT 设置原理
- Improved SEO with mod_rewrite
- OK335xS 256M 512M nand flash make ubifs hacking
- selenium webdriver 表格的定位方法练习
- ICSharpCode.SharpZipLib工具压缩与解压缩zip文件
- Ubuntu16.04安装wps办公软件解决文字缺失
- 【算法笔记】B1018 锤子剪刀布