#########################################################################################

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相关推荐

  1. 深度学习(8)TensorFlow基础操作四: 维度变换

    深度学习(8)TensorFlow基础操作四: 维度变换 1. View 2. 示例 3. Reshape操作可能会导致潜在的bug 4. tf.transpose 5. Squeeze VS Exp ...

  2. Tensorflow基础入门十大操作总结

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:李祖贤,Datawhale高校群成员,深圳大学 TensorFlo ...

  3. TF学习:Tensorflow基础案例、经典案例集合——基于python编程代码的实现

    TF学习:Tensorflow基础案例.经典案例集合--基于python编程代码的实现 目录 Tensorflow的使用入门 1.TF:使用Tensorflow输出一句话 2.TF实现加法 3.TF实 ...

  4. 机器学习Tensorflow基础知识、张量与变量

    TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库.节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组, ...

  5. Tensorflow基础语法和概念

    Tensorflow基础语法和概念 一些说明:学习tensorflow用到的Python语法,请参考这篇博客 计算图模型 Tensorflow的构建的机器学习模型都是有向图模型,在Tensorflow ...

  6. 深度学习(11)TensorFlow基础操作七: 向前传播(张量)实战

    深度学习(11)TensorFlow基础操作七: 向前传播(张量)实战 1. 导包 2. 加载数据集 3. 转换数据类型 4. 查看x.shape, y.shape, x.dtype, y.dtype ...

  7. 深度学习(10)TensorFlow基础操作六: 数学运算

    深度学习(10)TensorFlow基础操作六: 数学运算 1. Operation type 2. + - * / % // 3. tf.math.log & tf.exp 4. log2, ...

  8. 深度学习(9)TensorFlow基础操作五: Broadcasting

    深度学习(9)TensorFlow基础操作五: Broadcasting 1. 操作思想 2. 具体例子 3. 理解 (1) How to understand? (2) Why Broadcasti ...

  9. 深度学习(7)TensorFlow基础操作三: 索引与切片

    深度学习(7)TensorFlow基础操作三: 索引与切片 一. 基础索引 1. Basic indexing 2. Numpy-style indexing 3. start : end 4. 切片 ...

最新文章

  1. Android刷新机制-View绘制原理
  2. Alpha冲刺总结随笔
  3. centos安装 php时 出现 make: *** [ext/dom/node.lo] Error
  4. Vue - class与style绑定
  5. citrix xenapp应用保存文件时隐藏服务器上的磁盘
  6. Android Studio动态调试Smali
  7. lombok时运行编译无法找到get/set方法 看这篇就够了
  8. 面向对象(匿名内部类重写多个方法调用)
  9. 基于shell 脚本处理文本数据流程
  10. 用C#实现屏幕键盘!
  11. mac中安装使用podman,替换docker
  12. 将html导出到excel或word
  13. 大数据技术原理与应用学习笔记(八)
  14. 静态路由的简单案例(华为),一看就会
  15. dirent.h使用详解
  16. python中怎么输入正斜杠,Python中的正斜杠与反斜杠
  17. 计算机英语论文摘要,★计算机英语论文摘要范文计算机英语论文摘要写(9页)-原创力文档...
  18. PHP第三章到第七章
  19. 紫光云服务器芯片,紫光云与新华三半导体共建芯片设计云2.0 携手打造一站式云端芯片平台...
  20. 判断一个数为奇偶数的三种方法

热门文章

  1. ubuntu 安装php gd,如何在ubuntu上安装php5-gd?
  2. java如何给数字每三位加一个逗号_将每三个数字加上逗号处理Java代码
  3. python自动化测试流程_接口自动化基本流程(python)
  4. 三菱q系列特殊继电器一览表_2020山西三菱Q系列PLC模块回收购销
  5. 求1到100的奇数之和c语言,C语言实现1到100的和奇数与偶数和
  6. hello world_AngularJS Hello World示例
  7. python float_Python float()
  8. python ide_Python id()
  9. Python求笛卡尔积
  10. 浅析C++开发语言的特点