微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PyTorch Conv2D返回零输入张量的非零输出?

如何解决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,1)
b = a(torch.tensor(batch).permute(0,1,2))

print(b.permute(0,2,1))

解决方法

Tensorflow不同,PyTorch使用非零值初始化偏差(请参见source-code):

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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。