PyTorchがどのように機能し、CIFARで簡単なCNNトレーニングを複製したいのかを理解しようとしています。 CNTKスクリプトは、MXNetスクリプト(0.75の精度で153秒後)に似ているトレーニング(10エポック)の168秒後に0.76の精度になります。PyTorchとCNTK(CIFAR上のVGG)との一致
しかし、私のPyTorchスクリプトは、0.71の精度と354秒で多く遅れています。私は確率的な体重の初期化などのために精度に違いがあることに感謝します。しかし、フレームワークの違いは、フレームワーク内の違いよりはるかに大きく、ラン間でランダムに初期化されます。
私は考えることができるの理由:
- MXNetとCNTKはザビエル/ glorot均一に初期化されます。 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)
ありがとうございました!私は体重の初期化とグラデーションクリッピングを試してみましたが、CNTKと同じ精度とトレーニング時間を得ることはできません。実際に[Chainer](https://github.com/ilkarman/Blog/blob/master/DL-Examples/Chainer_CIFAR.ipynb)と比較すると、精度は7ppt低下し、2分遅くなります。私は9つの異なるDLフレームワーク全体でこの例を作成しているので、デフォルトのデータセットとデータローダーは使用しません。私の目標は、非常に似ていて簡単な(同じデータ)一連のスクリプトを取得することです。私は与えられた/外因性のデータを取る。 – Ilia