徐锦洪 发表于 2024-8-28 22:58:48

AI学习记录 - 怎么理解 torch 的 torch.nn.BatchNorm2d

画图不易,有用就点个赞
这里创建了一个随机张量,形状为 (4, 3, 4, 4),分别对应

形状为 (batch_size, num_channels, height, width)
batch_size:批次
num_channels: 通道(什么是通道看上一章节)
input_tensor = torch.randn(4, 3, 4, 4)
创建了个下面如许子的东西
https://i-blog.csdnimg.cn/direct/f2daddb490ed47fc804eed70939054b9.png
计算归一化是需要参考值的,由于需要知道最大值最小值,已经参与计算的数量,参考值来自于哪里呢,如下
https://i-blog.csdnimg.cn/direct/0d7b429ad70f484e85d24a9eccc728a0.png
合并起来,可以看到 num_channels = 3,所以分别计算3次
https://i-blog.csdnimg.cn/direct/5bfa413accca4060bf3011f8ec129643.png
计算均值和方差公式如下:
https://i-blog.csdnimg.cn/direct/b782d7bf056c4f37bfb7771c45624289.png
看不懂是不是,我也看不懂,举个简单的例子

假设一批数字为
均值

https://i-blog.csdnimg.cn/direct/18e22b4e268144af97a8f107ba34f18e.png
方差

https://i-blog.csdnimg.cn/direct/a11434e200a240cca6a5a777b55b9128.png
然后进行归一化

https://i-blog.csdnimg.cn/direct/9648c2dc0d1647a5bb76763cf64d1c98.png
计算完之后形状不会改变,只是值变了而已,上面新的数字组合起来均值接近0,方差接近1。实在熟悉这个计算过程意义不是很大,你就当在实际模型运算的时候,肯定会产生一些很大的值很小的值,假如天生的数据区间在[ 50,120 ],我们需要将这些值传入到激活函数内里,把 50 到120 传sigmoid激活函数内里,根本上都是0.9999…,数据之间根本没差别。

sigmoid函数,不进行归一化
https://i-blog.csdnimg.cn/direct/3e1805638a3c4d32b21a868ea710acee.png
sigmoid函数,归一化,将数字移动到激活函数有明显变化的区域,这就有差别了,充分发挥了激活函数的作用
https://i-blog.csdnimg.cn/direct/207640cc3b834da99c3da44af19f03e5.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: AI学习记录 - 怎么理解 torch 的 torch.nn.BatchNorm2d