pytorch 之 torch.nn.functional.LayerNorm()

torch.nn.LayerNorm(
        normalized_shape: Union[int, List[int], torch.Size],
        eps: float = 1e-05,
        elementwise_affine: bool = True)
————————————————
 

LayerNorm前向传播(以normalized_shape为一个int举例)

如下所示:

输入数据的shape是(3, 4)

此时normalized_shape传入4(输入维度最后一维的size)

则沿着最后一维(沿着最后一维的意思就是对最后一维的数据进行操作)求和,并用这两个结果把batch沿着最后一维归一化,使其均值为0,方差为1。归一化公式用到了eps(),即。
tensor = torch.FloatTensor([[1, 2, 4, 1],
                                                [6, 3, 2, 4],
                                                [2, 4, 6, 1]])

此时,(有偏样本方差),归一化后的值如下,

举例说明:第0行第2列的数字4,减去第0行的均值2.0等于2,然后除以即2/1.224749≈1.6330。
[[-0.8165,  0.0000,  1.6330, -0.8165],
 [ 1.5213, -0.5071, -1.1832,  0.1690],
 [-0.6509,  0.3906,  1.4321, -1.1717]]


如果elementwise_affine==True,则对归一化后的batch进行仿射变换,即乘以模块内部的weight(初值是[1., 1., 1., 1.])然后加上模块内部的bias(初值是[0., 0., 0., 0.]),这两个变量会在反向传播时得到更新。


如果elementwise_affine==False,则LayerNorm中不含有weight和bias两个变量,只做归一化,不会进行仿射变换。
总结

在使用LayerNorm时,通常只需要指定normalized_shape就可以了。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值