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相关推荐
- 深度学习(8)TensorFlow基础操作四: 维度变换
深度学习(8)TensorFlow基础操作四: 维度变换 1. View 2. 示例 3. Reshape操作可能会导致潜在的bug 4. tf.transpose 5. Squeeze VS Exp ...
- Tensorflow基础入门十大操作总结
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:李祖贤,Datawhale高校群成员,深圳大学 TensorFlo ...
- TF学习:Tensorflow基础案例、经典案例集合——基于python编程代码的实现
TF学习:Tensorflow基础案例.经典案例集合--基于python编程代码的实现 目录 Tensorflow的使用入门 1.TF:使用Tensorflow输出一句话 2.TF实现加法 3.TF实 ...
- 机器学习Tensorflow基础知识、张量与变量
TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库.节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组, ...
- Tensorflow基础语法和概念
Tensorflow基础语法和概念 一些说明:学习tensorflow用到的Python语法,请参考这篇博客 计算图模型 Tensorflow的构建的机器学习模型都是有向图模型,在Tensorflow ...
- 深度学习(11)TensorFlow基础操作七: 向前传播(张量)实战
深度学习(11)TensorFlow基础操作七: 向前传播(张量)实战 1. 导包 2. 加载数据集 3. 转换数据类型 4. 查看x.shape, y.shape, x.dtype, y.dtype ...
- 深度学习(10)TensorFlow基础操作六: 数学运算
深度学习(10)TensorFlow基础操作六: 数学运算 1. Operation type 2. + - * / % // 3. tf.math.log & tf.exp 4. log2, ...
- 深度学习(9)TensorFlow基础操作五: Broadcasting
深度学习(9)TensorFlow基础操作五: Broadcasting 1. 操作思想 2. 具体例子 3. 理解 (1) How to understand? (2) Why Broadcasti ...
- 深度学习(7)TensorFlow基础操作三: 索引与切片
深度学习(7)TensorFlow基础操作三: 索引与切片 一. 基础索引 1. Basic indexing 2. Numpy-style indexing 3. start : end 4. 切片 ...
最新文章
- Android刷新机制-View绘制原理
- Alpha冲刺总结随笔
- centos安装 php时 出现 make: *** [ext/dom/node.lo] Error
- Vue - class与style绑定
- citrix xenapp应用保存文件时隐藏服务器上的磁盘
- Android Studio动态调试Smali
- lombok时运行编译无法找到get/set方法 看这篇就够了
- 面向对象(匿名内部类重写多个方法调用)
- 基于shell 脚本处理文本数据流程
- 用C#实现屏幕键盘!
- mac中安装使用podman,替换docker
- 将html导出到excel或word
- 大数据技术原理与应用学习笔记(八)
- 静态路由的简单案例(华为),一看就会
- dirent.h使用详解
- python中怎么输入正斜杠,Python中的正斜杠与反斜杠
- 计算机英语论文摘要,★计算机英语论文摘要范文计算机英语论文摘要写(9页)-原创力文档...
- PHP第三章到第七章
- 紫光云服务器芯片,紫光云与新华三半导体共建芯片设计云2.0 携手打造一站式云端芯片平台...
- 判断一个数为奇偶数的三种方法
热门文章
- ubuntu 安装php gd,如何在ubuntu上安装php5-gd?
- java如何给数字每三位加一个逗号_将每三个数字加上逗号处理Java代码
- python自动化测试流程_接口自动化基本流程(python)
- 三菱q系列特殊继电器一览表_2020山西三菱Q系列PLC模块回收购销
- 求1到100的奇数之和c语言,C语言实现1到100的和奇数与偶数和
- hello world_AngularJS Hello World示例
- python float_Python float()
- python ide_Python id()
- Python求笛卡尔积
- 浅析C++开发语言的特点