肥宅钓鱼网
当前位置: 首页 钓鱼百科

机器学习中样本容量选择(深度学习中的轴)

时间:2023-07-13 作者: 小编 阅读量: 1 栏目名: 钓鱼百科

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

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

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

轴的概念

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

import torcha = 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.shaperes = 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设定了哪个轴,那对应的轴在拼接之后张量数会发生变化
  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# 一个很小的常数,防止除0​def 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(sself.variance_epsilon)return self.gamma * x_normself.beta

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

    推荐阅读
  • 抹茶蛋黄酥的做法(怎么做抹茶蛋黄酥)

    抹茶蛋黄酥的做法食材:中筋面粉120g,鸭蛋黄12个、黄油60g,糖粉30g温水60g、抹茶粉10g、红豆沙适量。将黄油加入面粉和糖粉中搓成屑状。和好的油皮、油酥面团用保鲜膜包好,静置30分钟。将油皮和油酥面团各分成小剂子。将油皮面团揉圆,压扁后包入一个油酥面团。收口朝下松弛20分钟。取适量红豆沙平铺在面饼上放入一个蛋黄。封口包成圆球形,收口朝下烤箱预热180度,上下火,中层烘烤30分钟即可。

  • 佟雅丽名字打分117分

    文章目录:一、佟雅丽相关名字打分101二、佟雅丽相关名字评分98三、佟雅丽相关名字推荐四、佟雅丽相关名字大全五、其他人还看了一、佟雅丽相关名字打分101羊不奶陶登奎陈兆虎姚壮文李厚勇王善金佟南方佟承畴佟爱国邱承彬李孝佟培基许晓树佟读音佟士委李绍彬索条影杨维清高定秀储料仓佟雨妍高德美佟国民何承志庾家河富土康佟星佟卓尧高玉磊孔祥德佟悦佟掌柜张福兰乐靖宜白蛤蟆佟娅柳英文张剑锋佟佳乐活卉佟显生赖天生佟雅丽

  • 如何煮饭(煮饭小技巧)

    首先要按量取米,先把电饭锅的内胆拿出来,按量取米放入锅中,二至三人取三杯米,以此类推;,我来为大家讲解一下关于如何煮饭?跟着小编一起来看一看吧!

  • 合同纠纷仲裁流程(合同纠纷仲裁三个基本步骤你了解过吗)

    接下来我们就一起去研究一下吧!合同纠纷仲裁流程申请合同纠纷仲裁,首先您应向仲裁委员会提交仲裁申请书写明相关内容,仲裁委员会在收到您的仲裁申请书之日起五日内作出受理或者不予受理的决定。如果决定立案的,自作出决定之日起,五日之内会向您和对方发出相关的书面通知,同时将申请书副本送达对方,并要求其十五日内提交答辩书和证据。在仲裁开始前会先进行调解,调解无果即进行仲裁。

  • 2023清明上河园年卡春节过年期间能不能用

    购买了清明上河园2023“扬眉兔气”年卡的用户在农历兔年期间游清明上河园,全年不限天,全天不限次!游清明上河园,逛大宋不夜城,白天、夜游、节假日,均可使用!

  • 泰拉瑞亚npc死了怎么办 泰拉瑞亚npc死了要多久复活

    泰拉瑞亚npc死了怎么办?很多玩家都担心过此类问题的发生,npc对玩家有很大的帮助,商人之类的亦是许多素材的重要来源,为此小编为特地为大家带来泰拉瑞亚npc复活条件解析,有兴趣的朋友们赶快点进来看一看吧。房间:每一间房子必须要有4格或以上空余的地方,不能有其他家具。房子旁边45格空间内不可以有超过250腐化率。

  • 荣耀畅玩8c标配充电器(荣耀畅玩8C还能反向充电)

    别的先不说,一个超大容量的电池肯定是必不可少的,荣耀畅玩8C就成功的达到第一要求。但是如果手机没有一个良好的智能电池管理技术,那么就算再大的电池都会被轻易消耗掉,所以这个时候荣耀畅玩8C搭载的更人性化的智慧节电技术发挥了巨大的作用。双管齐下,让荣耀畅玩8C能够满足普通用户近两天的需求,相信能够击中很多用户的使用痛点。然而这一切,荣耀畅玩8C都有,天生就具备了OTG反向充电的本领。

  • 吃树葡萄的好处与坏处 吃树葡萄的好处与坏处作文

    3、补钙壮骨人们食用树葡萄能吸收丰富植物蛋白,还能吸收一些微量元素钙和磷这些物质都能促进骨骼发育也能加快人体内骨胶原合成,经常吃素,葡萄能提高人类骨骼的韧性与密度,可提高骨骼健康水平,防止骨质疏松和骨关节疾病出现。

  • 金琥仙人球不能随便养吗(金琥仙人球不能随便养的原因)

    金琥仙人球不能随便养吗?下面更多详细答案一起来看看吧!在阳台和办公室摆放,防止小人是非,增强抵御能力。在卧室摆放则不利,多有是非口角发生。因为卧室是气场融合之地,不宜用此植物,会产生气场排斥的。养殖方法上不能随便:金琥仙人球虽然来自沙漠那样严酷的生长环境,适应性、生命力都比较强,但我们绝对不要意外生长环境变好了就可以对它不管不顾啊,否则不仅养不好而且可能会养死它的哦。

  • 帅气游戏名字(帅气游戏名字大全)

    一想到容嬷嬷就闪过班主任淚不再为你而流,我来为大家科普一下关于帅气游戏名字?下面希望有你要的答案,我们一起来看看吧!帅气游戏名字一想到容嬷嬷就闪过班主任淚不再为你而流待我刘海长长就做中分女王不确定的未来不负如来不负卿煙bū離手无可奈何ら公紸◆吥乖龍魂大哥可惜忘记了回忆。