tensorflow - PyTorch Conv2D为零输入张量返回非零输出?
问题描述
如果您将一个仅包含零的数组输入到 Conv2D 层,则输出也应该仅包含零。在 TensorFlow 中,就是这种情况。但是,在 PyTorch 中,情况并非如此。这是一些非常简单的示例 Python 代码来演示这一点。为什么 PyTorch 在这种情况下会输出非零数字?
import torch
import numpy as np
image = np.zeros((3,3,3), dtype=np.float32)
batch = np.asarray([image])
a = torch.nn.Conv2d(3,3,1)
b = a(torch.tensor(batch).permute(0,3,1,2))
print(b.permute(0,2,3,1))
解决方案
与Tensorflow不同,PyTorch 使用非零值初始化偏差(参见源代码):
def reset_parameters(self) -> None:
init.kaiming_uniform_(self.weight, a=math.sqrt(5))
if self.bias is not None:
fan_in, _ = init._calculate_fan_in_and_fan_out(self.weight)
bound = 1 / math.sqrt(fan_in)
init.uniform_(self.bias, -bound, bound)
推荐阅读
- symfony - Symfony 4, PHPUnit - 授权用户进行单元测试
- python - 如何使用 Python 的 Xlib 将文本写入根窗口?
- jquery - Jquery 数据表无法识别 HTML 更改
- c - 如何用指针理解字符串
- php - 如何更新数组本身中的数组中的元素?
- omnet++ - Castalia 3.2 能耗
- r - 从r中同一组中的其他行获取值
- python-3.x - 如何覆盖在熊猫数据框中与df2匹配的df1的行
- amazon-web-services - 同一服务器上多个长时间运行的应用程序的隔离 IAM 角色
- r - 如何使用正则表达式在字符串中填充零以获得长度为 4(从头到尾)?