【问题标题】:Matching PyTorch w/ CNTK (VGG on CIFAR)匹配带有 CNTK 的 PyTorch(CIFAR 上的 VGG)
【发布时间】: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


    【解决方案1】:

    我试着回答你的前两个问题:

    另外,我很好奇你为什么不使用torchvision.transformstorch.utils.data.DataLoader和torchvision.datasets.CIFAR10来加载和预处理你的数据?

    有一个类似cifar for Pytorch的图片分类教程 http://pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html#sphx-glr-beginner-blitz-cifar10-tutorial-py 希望对您有所帮助。

    【讨论】:

    • 非常感谢!我尝试过使用权重初始化和梯度裁剪——但仍然无法获得与 CNTK 相同的准确性和训练时间。事实上,当我将它与Chainer 进行比较时,准确度降低了 7 ppt,并且慢了 2 分钟。我不使用默认数据集和数据加载器,因为我在所有 9 个不同的 DL 框架中创建了这个示例,我的目标是获得一系列非常相似且易于比较(相同数据)的脚本 - 所以我将数据视为给定/外生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 2019-12-09
    • 2019-09-23
    • 2018-07-25
    • 1970-01-01
    相关资源
    最近更新 更多