©PaperWeekly 原创 · 作者|海晨威

学校|同济大学硕士生

研究方向|自然语言处理

在深度学习中,轴,指的就是张量的层级,一般通过参数 axis/dim 来设定。很多张量的运算、神经网络的构建,都会涉及到轴,但到底取哪个轴,却不是那么容易把握。

下面会针对轴/axis/dim,基于 PyTorch 的代码和实例,尝试去理清张量运算中轴/axis/dim 的设定。

轴的概念

对于一个张量,它的 shape 有几维,就对应有几个轴,也就对应着张量的层级,最直观的可以通过看最前面的方括号数量来判断。

import torch
a = torch.Tensor([[1,2,3], [4,5,6]])
b = torch.Tensor([[7,8,9], [10,11,12]])
c = torch.Tensor([[[1,2,3], [4,5,6]], [[7,8,9], [10,11,12]]])
print(a.shape)# torch.Size([2, 3])

上面的张量 a 和 b,都对应两个轴。axis/dim=0 对应 shape [2, 3] 中的 2,axis/dim=1 对应 shape [2, 3] 中的 3,而张量 c 有三个轴。

张量运算时对轴参数的设定非常常见,在 Numpy 中一般是参数 axis,在 Pytorch 中一般是参数 dim,但它们含义是一样的。

轴的使用

在做张量的拼接操作时,axis/dim 设定了哪个轴,那对应的轴在拼接之后张量数会发生变化

>> torch.cat((a,b), dim=0)
tensor([[ 1.,  2.,  3.],[ 4.,  5.,  6.],[ 7.,  8.,  9.],[10., 11., 12.]])>> torch.cat((a,b), dim=1)
tensor([[ 1.,  2.,  3.,  7.,  8.,  9.],[ 4.,  5.,  6., 10., 11., 12.]])

对于上面 torch 中的 cat 操作,当设定 dim=0 时,两个维度是 (2,3) 的张量合并成了一个 (4,3) 的张量,在第 0 维,张量数从 2 变成了 4,第 1 维没有变化;当设定 dim=1 时,在第 1 维,张量数从 3 变成了 6,第 0 维没有变化。

在做张量的运算操作时,axis/dim 设定了哪个轴,就会遍历这个轴去做运算,其他轴顺序不变。

>> torch.softmax(a, dim=0)
tensor([[0.0474, 0.0474, 0.0474],[0.9526, 0.9526, 0.9526]])>> torch.softmax(a, dim=1)
tensor([[0.0900, 0.2447, 0.6652],[0.0900, 0.2447, 0.6652]])

对于上面 torch 中的 softmax 操作,当设定 dim=0 时,就是其他轴不变,单次遍历 dim=0 轴的所有元素去做运算,上例中就相当于分别取了张量 a 中的第 0 列、第 1 列、第 2 列去做计算。

换一个角度,假设用 for 循环去遍历一个张量,那运算中设定的 dim 就是被放在最内层的 for 循环,其它的轴保持正常的顺序。

可以用下面的例子作为验证,这里 tensor  c  的 shape 是 (m,n,p),用 for 循环去计算 torch.softmax(c, dim=1) 。

# for循环计算方式
c = torch.Tensor([[[1,2,3], [4,5,6]], [[7,8,9], [10,11,12]]])    # shape (2,2,3)
m,n,p = c.shape
res = torch.zeros((m,n,p))
for i in range(m):for j in range(p):res[i,:,j] = torch.softmax(torch.tensor([c[i,k,j] for k in range(n)]), dim=0)  #这里对应最内层的for循环# 库函数设定轴计算方式
res1 = torch.softmax(c, dim=1)
print(res.equal(res1))        # True

axis/dim 使用小总结:

  1. 在做张量的拼接操作时,axis/dim 设定了哪个轴,那对应的轴在拼接之后樟树会发生变化 axis/dim 设定了哪个轴,那对应的轴在拼接之后的张量数会发生变化

  2. 在做张量的运算操作时,axis/dim 设定了哪个轴,就会遍历这个轴去做运算,其他轴顺序不变

实际上,第一条拼接操作也可以用第二条去理解,但拼接的轴张量数会发生变化更好理解和记忆。

轴的实例

其实一个轴设定的变化,会带来很大的差异,最典型的就是 BatchNorm 和 LayerNorm 了。

BatchNorm 和 LayerNorm 是针对数据的不同轴去做 norm,假设输入数据的维度是(N,C,H,W),分别对应 batch 数,核数,高,宽,BatchNorm 就对应 dim=0,LayerNorm 就对应 dim=1,在不考虑移动平均等具体细节问题时,两者在形式上可以统一,只有一个 dim 参数的差别。

Pytorch 的实现(简化版)如下:

class Norm(nn.Module):def __init__(self, num_features, variance_epsilon=1e-12):super(Norm, self).__init__()self.gamma = nn.Parameter(torch.ones(num_features))self.beta = nn.Parameter(torch.zeros(num_features))self.variance_epsilon = variance_epsilon    # 一个很小的常数,防止除0def forward(self, x, dim):u = x.mean(dim, keepdim=True)s = (x - u).pow(2).mean(dim, keepdim=True)x_norm = (x - u) / torch.sqrt(s + self.variance_epsilon)return self.gamma * x_norm + self.beta

当然,不仅仅是在深度学习里面,在 Numpy,Pandas中,轴的设定都经常会遇到,但它们都是相通的,希望本文能帮你更好的理解它 —> 轴。

更多阅读

#投 稿 通 道#

 让你的论文被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得技术干货。我们的目的只有一个,让知识真正流动起来。

???? 来稿标准:

• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)

• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接

• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志

???? 投稿邮箱:

• 投稿邮箱:hr@paperweekly.site

• 所有文章配图,请单独在附件中发送

• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通

????

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

关于PaperWeekly

PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。

代码+实例:深度学习中的“轴”全解相关推荐

  1. 深度学习中的轴/axis/dim全解

    在深度学习中,轴,指的就是张量的层级,一般通过参数axis/dim来设定.很多张量的运算.神经网络的构建,都会涉及到轴,但到底取哪个轴,却不是那么容易把握. 下面会针对轴/axis/dim,基于 Py ...

  2. 深度学习中的不确定性详解

    参考来源: https://www.zhihu.com/collection/767533853 https://zhuanlan.zhihu.com/p/56986840 单独的不确定性: 两种不确 ...

  3. 深度学习——神经网络之DNN全连接神经网络、BP算法原理

    深度学习--神经网络之DNN全连接神经网络.BP算法原理 深度学习--神经网络之DNN全连接神经网络.BP算法原理 1.啥是人工神经网络 2.神经网络的应用 3.神经网络的组成 3.1.神经元 3.2 ...

  4. 正则化的通俗解释_干货|深度学习中的正则化技术概述(附Python+keras实现代码)...

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 介绍 数据科学研究者们最常遇见的问题之一就是怎样避免过拟合.你也许在训练模型的时候也遇 ...

  5. 深度学习中的Normalization模型(附实例公式)

    来源:运筹OR帷幄 本文约14000字,建议阅读20分钟. 本文以非常宏大和透彻的视角分析了深度学习中的多种Normalization模型,从一个新的数学视角分析了BN算法为什么有效. [ 导读 ]不 ...

  6. 深度置信网络预测算法matlab代码_深度学习双色球彩票中的应用研究资料

    点击蓝字关注我们 AI研习图书馆,发现不一样的世界 深度学习在双色球彩票中的应用研究 前言 人工神经网络在双色球彩票中的应用研究网上已经有比较多的研究论文和资料,之前比较火的AlphaGo中用到的深度 ...

  7. 深度学习中的正则化技术(附Python代码)

    作者:SHUBHAM JAIN 翻译:和中华 校对:丁楠雅 本文约3500字,建议阅读20分钟. 本文简单介绍了什么是正则化以及在深度学习任务中可以采用哪些正则化技术,并以keras代码具体讲解了一个 ...

  8. 干货|一文全解深度学习中的卷积

    来源:1024深度学习 概要:卷积现在可能是深度学习中最重要的概念.正是靠着卷积和卷积神经网络,深度学习才超越了几乎其他所有的机器学习手段. 译自Tim Dettmers的Understanding ...

  9. DL之AF:机器学习/深度学习中常用的激活函数(sigmoid、softmax等)简介、应用、计算图实现、代码实现详细攻略

    DL之AF:机器学习/深度学习中常用的激活函数(sigmoid.softmax等)简介.应用.计算图实现.代码实现详细攻略 目录 激活函数(Activation functions)相关配图 各个激活 ...

最新文章

  1. 分享Css3设计---纯Css实现超酷的iphone玻璃气泡效果
  2. 二叉树的先序遍历(递归)
  3. TCP/IP状态详解
  4. 关于Mozilla浏览器不支持innerText的解决办法
  5. it oracle 培训,Oracle数据库技术培训_OracleDBA数据库工程师_Oracle数据库在线学习视频教程_IT职业培训-51CTO学院_精培学院...
  6. linux可以运行常规软件吗,Linux安装一些常规软件(浅显)
  7. 1.3 Hive架构原理
  8. socket自定义框架
  9. expect脚本的简单应用
  10. 25外观模式(Facade Pattern)
  11. jquery-购物车js
  12. 黄金三月,技术自检 | 作为测试人必备的10项 Linux 技能
  13. xis表格怎么打印_Excel做的表格怎么打印
  14. 志远电脑公司网站系统
  15. 中通2008通信概预算编制系统简介
  16. 职称评审需要满足的条件
  17. Redis哨兵原理详解
  18. Leetcode#183. Customers Who Never Order
  19. 安卓疫情打卡APP源码
  20. vue3查看当前路由

热门文章

  1. php 右下脚弹窗,纯js的右下角弹窗实例代码
  2. launch mode 应用场景
  3. 【BZOJ4500】矩阵(差分约束)
  4. LeetCode Subarray Sum Equals K
  5. 6-day6-函数-1
  6. bootstrap 模态 modal 小例子【转】
  7. hdu 2025 查找最大元素 (水)
  8. python语言支持苹果系统吗_Mac系统上的一款Python编程平台
  9. i219v linux,I219V高传播延迟
  10. java简单课程设计_!高分跪求帮忙写一个简单小程序的JAVA课程设计报告(内详!!)...