TensorFlow 维度变换

文章目录

  • TensorFlow 维度变换
    • 一.Reshape
    • 二.tf.transpose
    • 三.Squeeze和Expand_dims
  • Broadcasting
    • 前言
    • Broadcasting核心思想
    • Broadcasting有什么好处
    • Broadcasting演示

一.Reshape

这个方法是numpy的方法。不再赘述,需要说明的是,reshape虽然应用起来非常灵活。但是会造成一些问题。比如说,一个28乘以14的图片,你一不小心,把长宽的参数给搞反了,那么很容易就出bug。

而且,如果你真的想把长宽属性给颠倒一下,那么你就总得记住我哪个地方换了,那个地方没换,这样也很麻烦

二.tf.transpose

这个意思是:转置。这个单词其实本意是“交换,转换”。但实际上,转置也就意味着交换(英文真奇妙)

假设我这个长宽像素信息是按照[高度,宽度]存储的,我对这个矩阵转置,自然而然的就变成了[宽度,长度]。

在tensorFlow当中,tf.transpose的相关参数如下:

tf.transpose(a,perm=None,name='transpose',conjugate=False
) # 置换 a,根据 perm 重新排列尺寸

三.Squeeze和Expand_dims

Squeeze的英文含义:挤压。所以,从名称就可以知道,这是用来缩小维度的。

而Expand_dims从名字就可以看出,是用来升维的。

我们还以之前的,4个班级,每个班级35个学生,每个学生修8门课的示例为例:

  • In[105]:在Expand_dims当中,如果指定axis=0,那么就会在0轴之前增加维度
  • In[106]:若axis指定最后一个,那么就会在最后增加一个维度。
  • In[107] 和 In[108] : Expand_dims支持后向索引


关于squeeze,你可以像Expand_dims那样指定要操作的轴。除此之外呢,它还有一个特点,你若啥都不指定,那么会默认把所有的shape=1的维度给去掉(即:In[115]的部分)。

Broadcasting

前言

在Numpy当中就有Broadcasting,tensorFlow无缝继承了Numpy的Broadcasting,而且还进行了拓展了。总的来说,这是一种在不更新数据本身的情况下,对维度进行扩展的方法。

Broadcasting核心思想

在掌握Broadcasting的时候务必要知道以下要点:

首先,只适用于加减法。这是一个重要前提。

其次,知道如下步骤:

  • step1:首先,把两个数组,进行“右对齐”。比如说a.shape = [1,2,3,4], b.shape=[3,4]那么就首先把右侧的[3,4]部分对齐。

  • step2:如果二者维度相同,那么小的向大的靠拢,比如说:a.shape=[4,32,14,14],b.shape=[14,14]。

    那么,右对齐之后,(a+b).shape = [4,32,14,14]。这也算是一个要点:以短的为中心,必要的情况下,短的那个array,不断往前添1维。

  • step3:不过,对于step2这种情况下,也就只是1维的地方可以扩展。step2的时候,b的shape扩展为[1,1,14,14],正是因为前面两个是1,所以才能扩展。如果a.shape=[4,32,14,14],b.shape=[2,32,14,14]。那么不可以进行Broadcasting,因为b的第一维是2.

有一幅图,很好的反映了Broadcasting:

Broadcasting有什么好处

首先,Broadcasting不会额外占用内存,所以,更加的节省空间

其次,现实确实需要这种需求,比如说,我有一组数据[classes, students, courses] = [4,32,8]。存在一个数组a当中代表一共4个班级,每个班级32个学生,每个学生修8门课程。我现在要把每个学生的每个课程的分数都加五分。

那么我大可以写[4,32,8] +[5.0](当然了,后面这个5.0是个8列的数据)

Broadcasting演示

In [1]: import tensorflow as tf
In [2]: import numpy as np
In [3]: x = tf.random.normal([4,32,32,3])
In [4]: (x+tf.random.normal([3])).shape
Out[4]: TensorShape([4, 32, 32, 3])In [5]: (x+tf.random.normal([32,32,1])).shape
Out[5]: TensorShape([4, 32, 32, 3])In [6]: (x+tf.random.normal([4,1,1,1])).shape
Out[6]: TensorShape([4, 32, 32, 3])In [7]: x.shape
Out[7]: TensorShape([4, 32, 32, 3])In [8]: (x+tf.random.normal([4,1,1,1])).shape
Out[8]: TensorShape([4, 32, 32, 3])In [9]: b = tf.broadcast_to(tf.random.normal([4,1,1,1]),[4,32,32,3])
# 把shape为[4,1,1,1]的broadcast称为[4,32,32,3],如果不能Broadcasting,那么会报错In [10]: b.shape
Out[10]: TensorShape([4, 32, 32, 3])

TensorFlow——维度变换与Broadcasting相关推荐

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

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

  2. TensorFlow张量的维度变换

    在神经网络运算过程中,维度变换是最核心的张量操作,通过维度变换可以将数据任意地切换形式,满足不同场合的运算需求. 维度变换的一个例子: Y = X@W + b X 的 shape 为[2,4] W 的 ...

  3. 【TensorFlow2.0】(4) 维度变换、广播

    各位同学好,今天我和大家分享一下TensorFlow2.0中有关数学计算的相关操作,主要内容有: (1) 改变维度:reshape():(2) 维度转置:transpose():(3) 增加维度:ex ...

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

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

  5. tensor 增加维度_tensor维度变换

    维度变换是tensorflow中的重要模块之一,前面mnist实战模块我们使用了图片数据的压平操作,它就是维度变换的应用之一. 在详解维度变换的方法之前,这里先介绍一下View(视图)的概念.所谓Vi ...

  6. 深度学习_TensorFlow2.0基础_张量创建,运算,维度变换,采样

    Tensorflow2.0 基础 一:TensorFlow特性 1.TensorFlow An end-to-end open source machine learning platform end ...

  7. CRNN维度变换的解释这样你也可以自定义CRNN了

    # x=torch.rand([1, 3, 256, 256])# 首先要知道lstm是必须输入三维度的# nn.LSTM(256,128) 256 是输入维度[任意维度,任意维度,256] 输出是1 ...

  8. pytorch reshape_pytorch常用总结 之 tensor维度变换

    小白最近刚开始使用pytorch,经常需要在各个网站反复查询一些函数的区别.但是不同的博客说的有时候不一样,趁着实验室停电,小白写了这篇文章,方便自己食用,不定期更新.如有错误,欢迎大家热烈指正. 第 ...

  9. python维度变换_Python NumPy用法

    介绍 NumPy是Python数值计算最重要的基础包,大多数提供科学计算的包都是用NumPy的数组作为构建基础.NumPy本身并没有提供多么高级的数据分析功能,理解NumPy数组以及面向数组的计算,将 ...

最新文章

  1. 2021年大数据Spark(二十九):SparkSQL案例四开窗函数
  2. 测量功率MOS,IGBT动态特性的双脉冲方法
  3. Linux统计某文件夹下文件、文件夹的个数
  4. ExecutorCompletionService 源码分析
  5. GDIPlus灰度化图像
  6. android gps 速度,Android 获取GPS速度
  7. 车辆vin信息(含发动机号)
  8. educoder结构化分析方法-实体-联系图
  9. 有道云笔记 迁移 语雀过程记录
  10. js实现逐行打字,逐段打字效果(最全)
  11. python写stm32_python开发stm32例程
  12. 免费内网穿透远程访问家里的监控
  13. 资源网站模板Emlog程序zytheme模板
  14. 3分钟带你了解微信小程序开发
  15. 【JavaWEB】项目实战-黑马面面
  16. 使用transformers从头训练Bert
  17. 运营老司机分享:APP运营推广那些事
  18. 值得你收藏的办公技巧:word和execl使用技巧
  19. 想做Python开发,这8种常用Python模块,你必须得知道!
  20. 反弹Shell命令一键生成工具

热门文章

  1. 学习英语 考托福 个人失败经验
  2. filebrowser 忘记密码
  3. PMP工作模板(一)
  4. 长江大学工程技术学院计算机专业分数线,长江大学工程技术学院历年分数线 2021长江大学工程技术学院录取分数线...
  5. 数据结构与算法_汉诺塔
  6. 没有任何基础,能学会人工智能吗?哈佛博士后告诉你答案
  7. 神经网络与深度学习 作业8:RNN - 简单循环网络
  8. mac下mysql的DMG格式安装卸载方法
  9. 一个c语言的生日祝福
  10. 来安化云台山,认养一亩属于自己的专属茶园