科学研究プロセスで要約された、いくつかの些細な 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.Tensor
torch.tensor
:との違い
torch.Tensor(data
: データを torch.FloatTensor タイプに変換します。
torch.tensor(data)
: データ型または dtype パラメーター値に従って、データを torch.FloatTensor、torch.LongTensor、torch.DoubleTensor およびその他の型に変換します。torch.contiguous()
: C++ のディープ コピーに似ています。詳細については、このブログを参照してください。torch.stack()
関数: 同じサイズのテンソルを接続し、次元を拡張するために使用されます, analogytorch.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 に設定されます。ユーザーが手動で を定義するとVariable
、requires_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)
: 指定されたデバイスへの指定されたパスの事前トレーニング済みモデルを読み込みます。詳細については、このブログを参照してください。
参考文献
- Pytorch_.contiguous()_Morning の contiguous() 関数の理解 ブライト ブログ - CSDN ブログ
- Pytorch スプライシング関数: torch.stack() と torch.cat() – 詳細な説明と例_python torch splicing_Zizhi のブログ - CSDN ブログ
- pytorch の model.zero_grad() と optimizer.zero_grad()_models.zero_grad()_Wangwang ポプシクル ブログ - CSDN ブログ
- Pytorch: モデルの保存と読み込み torch.save()、torch.load()、torch.nn.Module.load_state_dict()