Machine learning 配备CNTK的匹配PyTorch(CIFAR上的VGG)

Machine learning 配备CNTK的匹配PyTorch(CIFAR上的VGG),machine-learning,deep-learning,cntk,pytorch,mxnet,Machine Learning,Deep Learning,Cntk,Pytorch,Mxnet,我试图了解PyTorch是如何工作的,并想在CIFAR上复制一个简单的CNN培训。经过168秒的训练(10个纪元),脚本的准确度达到了0.76,这与我的脚本类似(0.75153秒后的准确度) 然而,我的脚本在0.71的准确度和354秒的速度上落后了很多。我很感激,由于随机权重初始化等原因,我会得到准确性上的差异。然而,不同框架之间的差异远大于框架内的差异,在运行之间随机初始化 我能想到的原因是: MXNet和CNTK初始化为xavier/glorot统一;不确定如何在PyTorch中执行此操作

我试图了解PyTorch是如何工作的,并想在CIFAR上复制一个简单的CNN培训。经过168秒的训练(10个纪元),脚本的准确度达到了0.76,这与我的脚本类似(0.75153秒后的准确度)

然而,我的脚本在0.71的准确度和354秒的速度上落后了很多。我很感激,由于随机权重初始化等原因,我会得到准确性上的差异。然而,不同框架之间的差异远大于框架内的差异,在运行之间随机初始化

我能想到的原因是:

  • MXNet和CNTK初始化为xavier/glorot统一;不确定如何在PyTorch中执行此操作,因此可能会将权重初始化为0
  • 默认情况下,CNTK进行渐变剪裁;不确定PyTorch是否有同等的
  • 默认情况下,PyTorch中可能会删除该偏差
  • 我使用SGD与动量;也许Pytork动量的实现有点不同
编辑:

我已尝试指定重量初始化,但似乎没有太大影响:

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)

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

  • 权重初始化:不同类型的层有自己的方法,您可以在以下链接中找到所有这些层的默认权重初始化:

  • 渐变剪裁:您可能需要使用
    torch.nn.utils.clip\u grad\u norm

此外,我很好奇为什么不使用
torchvision.transforms
torch.utils.data.DataLoader
torchvision.datasets.CIFAR10
来加载和预处理数据

有一个类似的用于Pytorch的cifar图像分类教程
希望这能对您有所帮助。

非常感谢!我尝试过使用重量初始化和梯度剪裁,但是仍然无法获得与CNTK相同的准确性和训练时间。事实上,当我将其与之比较时,精确度要低7 ppt,慢2分钟。我不使用默认的数据集和数据加载器,因为我在所有9个不同的DL框架中创建了这个示例,我的目标是获得一系列非常相似且易于比较的脚本(相同的数据)——因此我将数据视为给定的/外部的。