【发布时间】:2018-01-25 16:03:36
【问题描述】:
我正在尝试了解 PyTorch 的工作原理,并希望在 CIFAR 上复制一个简单的 CNN 训练。 CNTK 脚本在训练 168 秒(10 个 epoch)后达到 0.76 的准确度,这与我的 MXNet 脚本(153 秒后的准确度 0.75)相似。
但是,我的 PyTorch 脚本在 0.71 准确度和 354 秒方面落后很多。我很感激我会因为随机权重初始化等而获得准确性差异。但是框架之间的差异远大于框架内的差异,在运行之间随机初始化。
我能想到的原因:
- MXNet 和 CNTK 被初始化为 xavier/glorot uniform;不确定如何在 PyTorch 中执行此操作,因此权重可能被初始化为 0
- CNTK 默认做渐变剪裁;不确定 PyTorch 是否有等价物
- 也许默认情况下 PyTorch 中会删除偏差
- 我使用带有动量的 SGD;也许动量的 PyTorch 实现有点不同
编辑:
我尝试过指定权重初始化,但似乎没有太大影响:
self.conv1 = nn.Conv2d(3, 50, kernel_size=3, padding=1)
init.xavier_uniform(self.conv1.weight, gain=np.sqrt(2.0))
init.constant(self.conv1.bias, 0)
【问题讨论】:
标签: machine-learning deep-learning cntk pytorch mxnet