たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

PyTorch-TensorFlow: 初期化の違い

PyTorchとTensorFlowで再現性の違いが出ることはよくある。
その要因の一つが初期化手法の違い。
なのでドキュメントとコードを当たって初期化手法をチェックした。

PyTorch vs TensorFlow

  • Linear: kaiming_uniform(a=√5) == ~U[±√1/fan_in] vs glorot_uniform (xavier_uniform) == ~U[±√6/(fan_in+fan_out)] 1
  • Conv1D: kaiming_uniform(a=√5) == ~U[±√1/fan_in]  2 vs glorot_uniform (xavier_uniform) == ~U[±√6/(fan_in+fan_out)]
  • Embedding: ~N(0,1) vs ~U(-0.05, 0.05) 3

  1. Dense がweight+biasでnn.Linear相当。

  2. ドキュメントには√1/n_param_in としか書いていない。これは Kaiming (He) のパラメータ a をデフォルトから変更したもの。code

  3. embeddings_initializer='uniform' でデフォルト初期化されているが、uniformは通常存在しない。コード読んでいくと後方互換性を保たれたRandomUniformだとわかる。確認実験済み。code