PyTorch 1.5 レシピ : 基本 : PyTorch の state_dict とは何か

PyTorch 1.5 レシピ : 基本 : PyTorch の state_dict とは何か (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 05/08/2020 (1.5.0)

* 本ページは、PyTorch 1.5 Recipes の以下のページを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

無料セミナー開催中 クラスキャット主催 人工知能 & ビジネス Web セミナー

人工知能とビジネスをテーマにウェビナー (WEB セミナー) を定期的に開催しています。スケジュールは弊社 公式 Web サイト でご確認頂けます。
  • お住まいの地域に関係なく 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 がどのように使用されるかを見ます。

 

ステップ

  1. データをロードするために総ての必要なライブラリをロードする。
  2. ニューラルネットワークを定義して初期化する。
  3. optimizer を初期化する。
  4. モデルと 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 を成功的に使用しました。

 
以上