栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Python

pytorch的BatchNorm1d到底是如何计算的?手绘可视化解释

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

pytorch的BatchNorm1d到底是如何计算的?手绘可视化解释

【原创文章,转载请注明出处,栓Q】
众所周知,Batchnorm1d是用来归一化2D和3D数据的,即input的shape是或者,看了很多介绍,有还原计算的,但是没有清晰地说明到底在哪个维度上进行的归一化,所以根据咱这“凑数”的本事亲自试验了一下,终于搞懂了,看下面的例子,看代码头疼的可以直接看图:
首先看input的shape是的例子:

import torch
bn=torch.nn.BatchNorm1d(num_features=2)
input = torch.tensor([[-1.,8.],[0.,0.],[1.,-8.]])
output=bn(input)
print(input)
print(output)
print(output.shape)

运行结果为:

tensor([[-1.,  8.],
        [ 0.,  0.],
        [ 1., -8.]])
tensor([[-1.2247,  1.2247],
        [ 0.0000,  0.0000],
        [ 1.2247, -1.2247]], grad_fn=)
torch.Size([3, 2])

看图:

2D数据的BN挺好理解的,就是在不同样本的同一个特征下做归一化。

----------------------------------------------------------------------------------------
然后看input的shape是的例子:

import torch
bn=torch.nn.BatchNorm1d(num_features=4)
input = torch.tensor([[[1.,2.],[3.,-2.],[-1.,-2.],[-3.,2.]],[[-1.,-2.],[-3.,2.],[1.,2.],[3.,-2.]]])
output=bn(input)
print(input)
print(output)
print(output.shape)

运行结果为:

tensor([[[ 1.,  2.],
         [ 3., -2.],
         [-1., -2.],
         [-3.,  2.]],
        [[-1., -2.],
         [-3.,  2.],
         [ 1.,  2.],
         [ 3., -2.]]])
tensor([[[ 0.6325,  1.2649],
         [ 1.1767, -0.7845],
         [-0.6325, -1.2649],
         [-1.1767,  0.7845]],
        [[-0.6325, -1.2649],
         [-1.1767,  0.7845],
         [ 0.6325,  1.2649],
         [ 1.1767, -0.7845]]], grad_fn=)
torch.Size([2, 4, 2])

看图:

这里为了清晰地说明通道和序列,特意画成行是序列,列是通道的样子,但是不影响理解,就是说哈,BN1d在BN 3D数据时的原理是,以通道一,也就是图中的c1为例,将c1下的两个样本的s1归一化,将c1下的两个样本的s2归一化。c2,c3,c4以此类推。宏观的理解是,假设input是2个样本的含有2个字的向量(比如是*[你,好][宝,贝]*),其中,每个字的词嵌入维度是4(就是每个字用4个数表示),BN1d是将“你”和“宝”的字向量按照对应的词嵌入维度进行归一化,然后再将“好”和“贝”的字向量按照对应的词嵌入维度进行归一化。

洞妖洞妖,over over

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1038381.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号