Pytorch使用体験談&ナレッジポイントまとめ

科学研究プロセスで要約された、いくつかの些細な pytorch 関連の知識ポイント。


1. データ読み込み

  • ロック ページ メモリ ( pin_memory) は、データがロック業界のメモリに配置されるか、ハード ディスクの仮想メモリに配置されるかを決定します。既定値は False です。True に設定すると、データがロック業界のメモリに配置されることを意味します。注: グラフィックス カードのメモリはすべてページロック メモリであるため、ページロック メモリに配置すると読み取り速度が速くなります。コンピュータに十分なメモリがある場合、この値を True に設定できます。このパラメータは通常、data_loader()関数。

  • num_worker最適な値は 2 -1 のべき乗です, 0, 1, 3, 7, など. 1 が自動的に加算されるため. デフォルト値は 1. このパラメータは一般にdata_loader()関数

  • グラフィック カードがデータを待機しているため、GPU の使用率が低くなっています。解決策は、(1)data_loader()関数を、(2) バッチ サイズを増やす、などです。


2. データ操作

  • Pytorch には、Tensor(テンソル) とVariable(変数) の 2 つの基本オブジェクトがあります。
  • torch.Tensortorch.tensor:との違い
    torch.Tensor(data: データを torch.FloatTensor タイプに変換します。
    torch.tensor(data): データ型または dtype パラメーター値に従って、データを torch.FloatTensor、torch.LongTensor、torch.DoubleTensor およびその他の型に変換します。
  • torch.contiguous(): C++ のディープ コピーに似ています。詳細については、このブログを参照してください
  • torch.stack()関数: 同じサイズのテンソルを接続し、次元を拡張するために使用されます, analogy torch.cat(). 注:操作する次元に dim を設定します. 詳細については、このブログを参照してください
  • using でtorch.zeros()作成したテンソルはデフォルトで CPU 上にあるので、GPU 上で使いたい場合は忘れずにデータを転送してください。
  • torch オブジェクトを印刷するときの省略記号の問題を解決します: torch.set_printoptions(threshold=np.inf)、このコマンドは主に完全なログを印刷するために使用されます。
  • numpy 型のデータは、CPU 上でのみ実行できます。torch 型と numpy 型の間でデータを変換する場合は、データの格納場所に注意してください (たとえば、GPU 上のテンソル データを numpy 型のデータに直接変換することはできません)。

3. モデル操作

3.1 モード切り替え

  • model.eval()とのmodel.train()違いは正規化レイヤー+ドロップアウトを有効にするかどうかで、前者は無効、後者は有効です。

3.2 勾配更新

  • Moduleのレイヤーが定義されている場合、関連するVariableパラメーターはrequires_gradデフォルトで True に設定されます。ユーザーが手動で を定義するとVariablerequires_gradパラメータのデフォルト値は False になり、volatile値もデフォルトで False になります。volatile優先度requires_gradが高くvolatile、プロパティが True のノードは導出されません (テスト段階で True に設定できます)。変更したい場合は、variable_name.require_grad_(True)それを。

  • バックプロパゲーションでの勾配の戻りと更新の実装には、(1) optimizer.zero_grad()(勾配の消去) (2) loss.backward()(勾配の戻り) (3) optimizer.step()(勾配の更新)の 3 つの手順が必要です。

  • model.zero_grad ()と のoptimizer.zero_grad ()使用方法の違い: の場合optimizer = optim.Optimizer (net.parameters ())、つまり、ネットワークのパラメーターが凍結されておらず、すべて更新する必要がある場合、この 2 つは同等であり、オプティマイザーは Adam や SGD などのオプティマイザーにすることができます。凍結されているか、複数のネットワークが同じ最適化デバイスを共有している場合、この 2 つは同等ではありません。詳細については、このブログを参照してください

  • with torch.no_grad()機能:autogradモジュールの動作を停止して、ビデオ メモリを高速化し、節約します。通常、検証およびテスト段階で使用されます。注: 新しいバージョンの Pytorch ではvolatile廃止され、次のように置き換える必要がありますwith torch.no_grad()

3.3 モデルの保存と読み込み

  • torch.save(model, path): トレーニング済みモデル model をパスに保存します。
  • torch.load(model_path, map_location): 指定されたデバイスへの指定されたパスの事前トレーニング済みモデルを読み込みます。詳細については、このブログを参照してください。

参考文献

おすすめ

転載: blog.csdn.net/qq_36332660/article/details/129939130