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

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

时间: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中,轴的设定都经常会遇到,但它们都是相通的,希望本文能帮你更好的理解它 —> 轴。

    推荐阅读
  • 晕车的原因(晕车的原因介绍)

    我们一起去了解并探讨一下这个问题吧!晕车的原因晕车与人体前庭平衡器官有很大的关系。当汽车启动、运行或刹车时,人的前庭会受到刺激,晕车的人容易出现前庭功能失衡,然后引起植物神经功能紊乱。植物神经对胃肠平滑肌的蠕动有支配作用,植物神经功能出现紊乱后胃肠平滑肌就会产生痉挛或逆蠕动,从而出现呕吐。

  • 姐姐贴贴是什么意思梗(姐姐贴贴解释)

    以下内容大家不妨参考一二希望能帮到您!姐姐贴贴是什么意思梗姐姐贴贴代表对漂亮姐姐的喜爱之情,饭圈里有粉丝喜欢哪个女明星就会用姐姐贴贴来表达,贴贴一词来源于日本,是日语てぇてぇ的空耳发音,中文是尊贵的意思,也可用来形容人事物很美好。现在更多用来形容两人之间的关系和互动很亲密,包括爱情、亲情和友情等。

  • 室性心律失常和室颤(加速的室性心律)

    若单个出现称逸搏,若连续三个或三个以上出现称逸搏心律。按发生部位称房性逸搏、房室交界性逸搏、室性逸搏。心电图诊断1,一系列宽大畸形的QRS波群起源于心室,QRS时间时限≥120ms2,心室率为40-100bpm,节律多不规则。3,在窦性心律、窦性心动过缓时发生,窦性频率加快以后,加速的室性心律消失。

  • a货翡翠珠子能做什么(一个珠子翡翠手链有多少钱一克)

    下面更多详细答案一起来看看吧!a货翡翠珠子能做什么一看就是缅甸A货翡翠的散珠做的手串,有的带有黄翡,有的是紫罗兰色,还有两个是豆青色,这样的珠子一般是做剩下的边角料或者裂纹太多没法出大件的翡翠原料打磨出来的。但是这依然不失它A货的身份,做手串,或者编织成项链都是很好的装饰品。目测你这个珠子直径应该在六到七毫米,看种、水头都很好,市场合理价在5到8百元之间。

  • 蛋黄的功效与作用(蛋黄果的功效与作用图片)

    蛋黄就是鸡蛋或者鸭蛋中的蛋黄,是一种营养价值特别高的常见食材,平时人们给婴儿添加辅食时,就多以蛋黄为主。另外蛋黄加乳汁调匀以后给幼儿服用,还能镇静宁神,对幼儿惊厥有明显治疗作用。

  • polo加油盖怎么开(polo加油盖开的方法)

    polo加油盖怎么开很多人都以为POLO这款车的油箱开关是在主驾驶仓内,其实并不然,无论是三厢还是两箱,油箱的开启方法都不是在车内进行的,而是在车外。这款车的邮箱位置与其他车不同的是,这款车的加油口,是在副驾驶的一侧,如果我们要去加油站,可千万不要搞错了。如果我们的钥匙在车里,那么有时是无法打开油箱盖的,所以一定要随身携带。

  • 宋词里的经典诗句(看尽宋词里的红与绿)

    主要涉及到三首宋词,李清照的《如梦令·昨夜雨疏风骤》,柳永的《八声甘州》和蒋捷的《一剪梅·舟过吴江》。李清照写这首词的年纪大约是十六岁,在18岁出嫁之前。那时的李清照已是名满京城的才女,也是即将出嫁的妙龄少女。据说,这首词大约作于柳永游宦江浙之时。词人仿佛站在美丽逝去而残留的尸体前悼念,感叹生与死,盛与衰。

  • 重庆常态化核酸几天 重庆24h核酸检测

    重庆常态化核酸几天答:重庆常态化建议做一次核酸“不过,‘全域常态化防控’不等于能放松防控。疫情防控形势依然严峻复杂。有些市民认为“全域常态化”或许可以稍微放松警惕,对各项防护措施有所松懈,对此专家表示:“鉴于奥密克戎变异株传染性强、传播快、隐匿性高,我们仍要坚持‘外防输入、内防反弹’总策略和‘动态清零’总方针,因此‘全域常态化防控’不能有丝毫松懈麻痹,非必要尽量不要前往有中高风险区的城市,避免不必

  • 老式鸡蛋的正宗做法和配方(怎样制作正宗老式鸡蛋)

    下面希望有你要的答案,我们一起来看看吧!老式鸡蛋的正宗做法和配方水500g,淀粉适量,黑胡椒粉5g,醋50g,鸡蛋2-3个,肉20g,葱10g。肉切丁,葱切小段,鸡蛋打散。水烧开,加入肉丁。淀粉加水搅拌,入锅。烧开后加胡椒粉和醋。

  • 先虐后甜的文(年下文真的很甜)

    年下文真的很甜‬目录《诱她入怀》《我穿进了恋综剧本里》《不虞之隙》《早春玫瑰》《悬溺》《蓄意靠近》《趁醉装疯》‬《诱她入怀》作者:温又野文案:作为娱乐圈顶流,江知落美貌在线气质清冷,合作过无数当红爱豆,却就是擦不出。