我最近发现了 Andrej Karpathy 的这条推特帖子。他在其中陈述了神经网络开发过程中的一些常见错误。
- 您没有尝试首先过度拟合单个批次。
- 您忘记为网络切换训练/评估模式。
- 您在 .backward() 之前忘记了 .zero_grad() (inpytorch)。
- 您将 softmaxed 输出传递给期望原始 logits 的损失。
- 在使用 BatchNorm 时,您没有对 Linear/Conv2d 层使用bias=False,或者相反忘记将其包含在输出层中。这不会让你默默地失败,但它们是虚假参数
- 认为 view() 和 permute() 是同一件事(& 错误地使用 view)
我对第五条评论的解释或动机特别感兴趣。考虑到我有一个类似的网络,更是如此
self.conv0_e1 = nn.Conv2d(f_in, f_ot, kernel_size=3, stride=1, padding=1)
self.conv1_e1 = nn.Conv2d(f_ot, f_ot, kernel_size=3, stride=1, padding=1)
self.norm_e1 = nn.BatchNorm2d(num_features=f_ot, eps=0.001, momentum=0.01)
self.actv_e1 = nn.ReLU()
self.pool_e1 = nn.MaxPool2d(kernel_size=2, stride=2)
在构造函数中torch.Conv2d隐含的地方。bias=True
我将如何实现上面代码示例中的第五点?不过,根据这一点的第二句话,这似乎并不重要?...