gpt4 book ai didi

pytorch - 一起使用 nn.Linear() 和 nn.BatchNorm1d()

转载 作者:行者123 更新时间:2023-12-01 22:27:25 43 4
gpt4 key购买 nike

我不明白当数据为 3D 时 BatchNorm1d 如何工作(批量大小、H、W)。

示例

  • 输入大小:(2,50,70)
  • 图层:nn.Linear(70,20)
  • 输出大小:(2,50,20)

如果我随后包含批量归一化层,则需要 num_features=50:

  • BN:nn.BatchNorm1d(50)

我不明白为什么不是 20:

  • BN:nn.BatchNorm1d(20)

示例1)

class Net(nn.Module):
def __init__(self):
super(Net,self).__init__()
self.bn11 = nn.BatchNorm1d(50)
self.fc11 = nn.Linear(70,20)

def forward(self, inputs):
out = self.fc11(inputs)
out = torch.relu(self.bn11(out))
return out

model = Net()
inputs = torch.Tensor(2,50,70)
outputs = model(inputs)

示例2)

class Net(nn.Module):
def __init__(self):
super(Net,self).__init__()
self.bn11 = nn.BatchNorm1d(20)
self.fc11 = nn.Linear(70,20)

def forward(self, inputs):
out = self.fc11(inputs)
out = torch.relu(self.bn11(out))
return out

model = Net()
inputs = torch.Tensor(2,50,70)
outputs = model(inputs)
  • 示例 1 有效。
  • 示例 2 引发错误:
    • 运行时错误:running_mean 应包含 50 个元素而不是 20

二维示例:

  • 输入大小:(2,70)
  • 图层:nn.Linear(70,20)
  • BN:nn.BatchNorm1d(20)

我认为 BN 层中的 20 是因为线性层输出了 20 个节点,并且每个节点都需要一个运行的平均值/标准差来输入值。

为什么在 3D 情况下,如果线性层有 20 个输出节点,BN 层没有 20 个特征?

最佳答案

可以在 torch.nn.Linear documentation 中找到答案.

它接受形状为 (N, *, I)输入并返回 (N, *, O),其中 I 代表输入维度,O 代表输出暗淡,* 是两者之间的任何维度。

如果将 torch.Tensor(2,50,70) 传递给 nn.Linear(70,20),您将获得形状 (2 , 50, 20) 并且当您使用 BatchNorm1d 时,它会计算第一个非批量维度的运行平均值,因此它将是 50。这就是错误背后的原因。

关于pytorch - 一起使用 nn.Linear() 和 nn.BatchNorm1d(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57114974/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com