PyTorch 1.5 レシピ : 基本 : PyTorch の state_dict とは何か (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 05/08/2020 (1.5.0)
* 本ページは、PyTorch 1.5 Recipes の以下のページを翻訳した上で適宜、補足説明したものです:
- Basic : What is a state_dict in PyTorch
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
- Windows PC のブラウザからご参加が可能です。スマートデバイスもご利用可能です。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション |
E-Mail:sales-info@classcat.com ; WebSite: https://www.classcat.com/ |
Facebook: https://www.facebook.com/ClassCatJP/ |
基本 : PyTorch の state_dict とは何か
PyTorch では、torch.nn.Module モデルの学習可能パラメータは (model.parameters() でアクセスされる) モデルのパラメータに含まれます。state_dict は各層をそのパラメータ tensor にマップする、単純に Python 辞書オブジェクトです。
イントロダクション
state_dict は PyTorch に/からモデルをセーブ/ロードすることに関心がある場合、不可欠な実在です。state_dict オブジェクトは Python 辞書ですので、それらは容易にセーブ、更新、変更、そしてリストア可能で、PyTorch と optimizer に多大なモジュール性を追加します。学習可能なパラメータを持つ層 (畳込み層、線形層 etc.) と登録されたバッファ (batchnorm の running_mean) だけがモデルの state_dict でエントリを持ちます。optimizer オブジェクト (torch.optim) もまた stated_dict を持ちます、これは 使用されるハイパーパラメータに加えて optimizer の状態についての情報も含みます。このレシピでは、単純なモデルで state_dict がどのように使用されるかを見ます。
ステップ
- データをロードするために総ての必要なライブラリをロードする。
- ニューラルネットワークを定義して初期化する。
- optimizer を初期化する。
- モデルと optimizer の state_dict にアクセスする。
1. データをロードするために必要なライブラリをインポートする
このレシピのために、torch とその補助 torch.nn と torch.optim を利用します。
import torch import torch.nn as nn import torch.optim as optim
2. ニューラルネットワークを定義して初期化する
例のために、訓練画像のためのニューラルネットワークを作成します。更に学習するためには ニューラルネットワークを定義する レシピを見てください。
class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(3, 6, 5) self.pool = nn.MaxPool2d(2, 2) self.conv2 = nn.Conv2d(6, 16, 5) self.fc1 = nn.Linear(16 * 5 * 5, 120) self.fc2 = nn.Linear(120, 84) self.fc3 = nn.Linear(84, 10) def forward(self, x): x = self.pool(F.relu(self.conv1(x))) x = self.pool(F.relu(self.conv2(x))) x = x.view(-1, 16 * 5 * 5) x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.fc3(x) return x net = Net() print(net)
3. optimizer を初期化する
SGD with モメンタムを使用します。
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)
4. モデルと optimizer state_dict にアクセスする
モデルと optimizer をコンストラクトした今、それらのそれぞれの state_dict プロパティで何が保存されるかを理解できます。
# Print model's state_dict print("Model's state_dict:") for param_tensor in net.state_dict(): print(param_tensor, "\t", net.state_dict()[param_tensor].size()) print() # Print optimizer's state_dict print("Optimizer's state_dict:") for var_name in optimizer.state_dict(): print(var_name, "\t", optimizer.state_dict()[var_name])
この情報は将来の利用のためにモデルと optimizer をセーブしてロードするために適切です。
Congratulations! PyTorch で state_dict を成功的に使用しました。
以上