图解TensorFlow中Tensor的shape概念与tf op: tf.reshape

2024-04-01 03:58

本文主要是介绍图解TensorFlow中Tensor的shape概念与tf op: tf.reshape,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

田海立@CSDN 2020-10-18

《图解NCHW与NHWC数据格式》中从逻辑表达和物理存储角度用图的方式讲述了NHWC与NCHW两种数据格式,数据shape是可以改变的,本文介绍TensorFlow里Tensor的Shape概念,并用图示和程序阐述了reshape运算。

 

一、TensorFlow中Tensor的Shape

TensorFlow中的数据都是由Tensor来表示,Shape相关有下列一些概念:

  • Rank:维数
  • Dimension:表达每一维长度
  • Size:所有的Dimension数值相乘,也就是Tensor里数据元素的尺寸了

rank为0/1/2的典型Tensor如下图所示:

 

Tensor rank为3时,数据表达为:

 

二、Tensor的逻辑表达与物理存储

如《图解NCHW与NHWC数据格式》中所述,数据可以从逻辑上和物理排布上去理解。而本文第一节中你可以仍从逻辑上去理解,还未牵涉到物理存储数据排布。

三维以下的比较容易理解,各个ML框架之间也没大的区别,对于三维(及以上)Tensor的排布就很不同了,这里着重介绍3-D。

我们已经知道TensorFlow的Tensor缺省是NHWC的,对于上面的shape(3, 2, 5)的Tensor【n为1】,在TensorFlow中应该是这样的:

如果数据值按顺序排布如下,

      [[[ 0,  1,  2,  3,  4],[ 5,  6,  7,  8,  9]],[[10, 11, 12, 13, 14],[15, 16, 17, 18, 19]],[[20, 21, 22, 23, 24],[25, 26, 27, 28, 29]]]

那么对应上面三维立方体的摆放应该如下:

 

三、tf.reshape()运算

 

reshape原型如下:

tf.reshape(tensor, shape, name=None
)

 

3.1 tf.reshape()的不改变性

  1. tf.reshape()运算不改变数据的物理排布,也就是说一个Tensor reshape到别的shape只是逻辑上shape的改变,存储的数据不会改变;
  2. tf.reshape()也就不会改变Tensor的size。指定的新的shape的size如果与原Tensor的size不一致就会报错。比如上面Shape(3, 2, 5)的Tensor就没法reshape成7x?。

有了上面两个原则,tf.reshape()运算就很容易理解了,物理存储不变,就看rank以及各个dimension怎么取了。

 

3.2 tf.reshape() 图示

比如,上面Tensor有30个数:从0~29顺序存储。可以存储为(3, 2, 5)【上面介绍过的3-D】,也可以存储为2D的(3, 10)或(6, 5),也可以存储为1-D的,全部展开。

 

3.3 程序实现如下:

TF2.0以后的版本上,直接可以执行,而不用还要在session下执行。当然前提是已经

import tensorflow as tf

1. 30个数的数据

>>> t = tf.range(30)
>>> t
<tf.Tensor: shape=(30,), dtype=int32, numpy=
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], dtype=int32)>
>>> 

2. shape(3, 2, 5)

>>> t = tf.reshape(t, [3,2,5])
>>> t
<tf.Tensor: shape=(3, 2, 5), dtype=int32, numpy=
array([[[ 0,  1,  2,  3,  4],[ 5,  6,  7,  8,  9]],[[10, 11, 12, 13, 14],[15, 16, 17, 18, 19]],[[20, 21, 22, 23, 24],[25, 26, 27, 28, 29]]], dtype=int32)>
>>> 

3. shape(3, 10)

>>> t = tf.reshape(t, [3, 10])
>>> t
<tf.Tensor: shape=(3, 10), dtype=int32, numpy=
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],[20, 21, 22, 23, 24, 25, 26, 27, 28, 29]], dtype=int32)>
>>> 

4. shape(6, 5)

>>> t = tf.reshape(t, [6, 5])
>>> t
<tf.Tensor: shape=(6, 5), dtype=int32, numpy=
array([[ 0,  1,  2,  3,  4],[ 5,  6,  7,  8,  9],[10, 11, 12, 13, 14],[15, 16, 17, 18, 19],[20, 21, 22, 23, 24],[25, 26, 27, 28, 29]], dtype=int32)>
>>> 

 

四、小结

本文介绍了TensorFlow里Tensor的Shape概念,并用图示和实际程序解释了reshape的变化。

 

这篇关于图解TensorFlow中Tensor的shape概念与tf op: tf.reshape的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/866152

相关文章

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用@CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略,该策略要求请求的域名、协议和端口必须与提供资源的服务相同。如果不相同,则需要服务器显式地允许这种跨域请求。一般在springbo

【MRI基础】TR 和 TE 时间概念

重复时间 (TR) 磁共振成像 (MRI) 中的 TR(重复时间,repetition time)是施加于同一切片的连续脉冲序列之间的时间间隔。具体而言,TR 是施加一个 RF(射频)脉冲与施加下一个 RF 脉冲之间的持续时间。TR 以毫秒 (ms) 为单位,主要控制后续脉冲之前的纵向弛豫程度(T1 弛豫),使其成为显著影响 MRI 中的图像对比度和信号特性的重要参数。 回声时间 (TE)

图解TCP三次握手|深度解析|为什么是三次

写在前面 这篇文章我们来讲解析 TCP三次握手。 TCP 报文段 传输控制块TCB:存储了每一个连接中的一些重要信息。比如TCP连接表,指向发送和接收缓冲的指针,指向重传队列的指针,当前的发送和接收序列等等。 我们再来看一下TCP报文段的组成结构 TCP 三次握手 过程 假设有一台客户端,B有一台服务器。最初两端的TCP进程都是处于CLOSED关闭状态,客户端A打开链接,服务器端

计算机网络基础概念 交换机、路由器、网关、TBOX

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、VLAN是什么?二 、交换机三、路由器四、网关五、TBOXTelematics BOX,简称车载T-BOX,车联网系统包含四部分,主机、车载T-BOX、手机APP及后台系统。主机主要用于车内的影音娱乐,以及车辆信息显示;车载T-BOX主要用于和后台系统/手机APP通信,实现手机APP的车辆信息显示与控

图解可观测Metrics, tracing, and logging

最近在看Gophercon大会PPT的时候无意中看到了关于Metrics,Tracing和Logging相关的一篇文章,凑巧这些我基本都接触过,也是去年后半年到现在一直在做和研究的东西。从去年的关于Metrics的goappmonitor,到今年在排查问题时脑洞的基于log全链路(Tracing)追踪系统的设计,正好是对这三个话题的实践。这不禁让我对它们的关系进行思考:Metrics和Loggi

01 Docker概念和部署

目录 1.1 Docker 概述 1.1.1 Docker 的优势 1.1.2 镜像 1.1.3 容器 1.1.4 仓库 1.2 安装 Docker 1.2.1 配置和安装依赖环境 1.3镜像操作 1.3.1 搜索镜像 1.3.2 获取镜像 1.3.3 查看镜像 1.3.4 给镜像重命名 1.3.5 存储,载入镜像和删除镜像 1.4 Doecker容器操作 1.4

【机器学习-一-基础概念篇】

机器学习 定义分类算法 应用 定义 机器学习最早是被Arthur Samuel 提出的一个概念,指计算机无需明确编程即可学习的研究领域。1950年他发明的跳棋程序,这个人机对弈游戏让他的声名鹊起,机器学习这个概念才进入大众的是视线。 在这个跳棋程序里,他编程了一种算法,这个程序与Arthur下了数万次跳棋,计算机逐渐学会了下在哪里有更大的可能会赢得比赛,哪里会输,通过这种方法,最

【吊打面试官系列-Redis面试题】说说 Redis 哈希槽的概念?

大家好,我是锋哥。今天分享关于 【说说 Redis 哈希槽的概念?】面试题,希望对大家有帮助; 说说 Redis 哈希槽的概念? Redis 集群没有使用一致性 hash,而是引入了哈希槽的概念,Redis 集群有 16384 个哈希槽,每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽, 集群的每个节点负责一部分 hash 槽。

AI辅助编程里的 Atom Group 的概念和使用

背景 在我们实际的开发当中,一个需求往往会涉及到多个文件修改,而需求也往往有相似性。 举个例子,我经常需要在 auto-coder中需要添加命令行参数,通常是这样的: /coding 添加一个新的命令行参数 --chat_model 默认值为空 实际上这个需求涉及到以下文件列表: /Users/allwefantasy/projects/auto-coder/src/autocoder/auto

读软件设计的要素04概念的关系

1. 概念的关系 1.1. 概念是独立的,彼此间无须相互依赖 1.1.1. 一个概念是应该独立地被理解、设计和实现的 1.1.2. 独立性是概念的简单性和可重用性的关键 1.2. 软件存在依赖性 1.2.1. 不是说一个概念需要依赖另一个概念才能正确运行 1.2.2. 只有当一个概念存在时,包含另一个概念才有意义 1.3. 概念依赖关系图简要概括了软件的概念和概念存在的理