pytoch状態辞書:state_使用詳細
4643 ワード
pytochのstate_dictは簡単なpythonの辞書オブジェクトであり、各階層とその対応するパラメータをマッピング関係を確立する。
(注意してください。これらのパラメータが訓練できるlayerだけがモデルのstate_に保存されます。dictでは、巻末層、線形層など)
最適化対象のOptimizerにもstate_があります。dictは、最適化器の状態と使用される超パラメータ(lr,momenum,weight_)を含んでいます。decayなど)
備考:
1)state_dictはmodelまたはoptimizerを定義した後にpytochが自動的に生成され、直接に呼び出すことができます。よく使われる保存state(u)dictのフォーマットは「.pt」または「.pth」のファイルで、以下のコマンドのPATH=「./**.pt」です。
モダリティ辞書dict)の保存(modelはネットワーク構造のオブジェクトです。)
1.1)学習したパラメータのみを保存し、以下のコマンドを使用します。
2.1)全体のmodelの状態を保存し、以下のコマンドを使用します。
どのように1階の訓練の着くパラメーターだけをロードしますか?
If you want to load parameters from one layer to another,but some keys do not match,simply change the name of the parameter keys in the state_dict that you are loading to match the keys in the model that you are loading into.
疑問:直接的にある層に対してrequires_を使ってもいいですか?gradは例えば:model.co nv 1.requires_grad=False
答え:テストしたらだめです。model.co nv 1 requires_はありません。grad属性
すべてのテストコード:
(注意してください。これらのパラメータが訓練できるlayerだけがモデルのstate_に保存されます。dictでは、巻末層、線形層など)
最適化対象のOptimizerにもstate_があります。dictは、最適化器の状態と使用される超パラメータ(lr,momenum,weight_)を含んでいます。decayなど)
備考:
1)state_dictはmodelまたはoptimizerを定義した後にpytochが自動的に生成され、直接に呼び出すことができます。よく使われる保存state(u)dictのフォーマットは「.pt」または「.pth」のファイルで、以下のコマンドのPATH=「./**.pt」です。
torch.save(model.state_dict(), PATH)
2)ロードストーンstate_dictもmodelまたはoptimizerの後にpytouchが自動的に備わる関数です。直接に呼び出すことができます。
model = TheModelClass(*args, **kwargs)
model.load_state_dict(torch.load(PATH))
model.eval()
注意:model.eval()の重要性は、2)の中で最後にmodel.eval()を使用したのは、このコマンドを実行した後だけ、「dropout層」と「batch normalzation層」はevalutionモードに入ります。「トレーニングモード」と「評価(evalution)モード」では、この2つの表現が異なります。モダリティ辞書dict)の保存(modelはネットワーク構造のオブジェクトです。)
1.1)学習したパラメータのみを保存し、以下のコマンドを使用します。
torch.save(model.state_dict(), PATH)
1.2)model.state_をロードする。次のコマンドで
model = TheModelClass(*args, **kwargs)
model.load_state_dict(torch.load(PATH))
model.eval()
備考:model.load_state_dictの操作対象は具体的なオブジェクトであり、ファイル名ではありません。2.1)全体のmodelの状態を保存し、以下のコマンドを使用します。
torch.save(model,PATH)
2.2)model全体をロードした状態は、以下のコマンドを使用します。
# Model class must be defined somewhere
model = torch.load(PATH)
model.eval()
state_dictはpythonの辞書形式です。辞書形式で保存して、辞書形式でロードされます。そして、keyマッチの項目だけをロードします。どのように1階の訓練の着くパラメーターだけをロードしますか?
If you want to load parameters from one layer to another,but some keys do not match,simply change the name of the parameter keys in the state_dict that you are loading to match the keys in the model that you are loading into.
conv1_weight_state = torch.load('./model_state_dict.pt')['conv1.weight']
モデルパラメータをロードした後、どのようにある階のパラメータの「トレーニングが必要ですか?」を設定しますか?grad
for param in list(model.pretrained.parameters()):
param.requires_grad = False
注意:requires_gradの操作対象はtenssorです。疑問:直接的にある層に対してrequires_を使ってもいいですか?gradは例えば:model.co nv 1.requires_grad=False
答え:テストしたらだめです。model.co nv 1 requires_はありません。grad属性
すべてのテストコード:
#-*-coding:utf-8-*-
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
# define model
class TheModelClass(nn.Module):
def __init__(self):
super(TheModelClass,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
# initial model
model = TheModelClass()
#initialize the optimizer
optimizer = optim.SGD(model.parameters(),lr=0.001,momentum=0.9)
# print the model's state_dict
print("model's state_dict:")
for param_tensor in model.state_dict():
print(param_tensor,'\t',model.state_dict()[param_tensor].size())
print("
optimizer's state_dict")
for var_name in optimizer.state_dict():
print(var_name,'\t',optimizer.state_dict()[var_name])
print("
print particular param")
print('
',model.conv1.weight.size())
print('
',model.conv1.weight)
print("------------------------------------")
torch.save(model.state_dict(),'./model_state_dict.pt')
# model_2 = TheModelClass()
# model_2.load_state_dict(torch.load('./model_state_dict'))
# model.eval()
# print('
',model_2.conv1.weight)
# print((model_2.conv1.weight == model.conv1.weight).size())
##
conv1_weight_state = torch.load('./model_state_dict.pt')['conv1.weight']
print(conv1_weight_state==model.conv1.weight)
model_2 = TheModelClass()
model_2.load_state_dict(torch.load('./model_state_dict.pt'))
model_2.conv1.requires_grad=False
print(model_2.conv1.requires_grad)
print(model_2.conv1.bias.requires_grad)
以上のpytoch状態辞書:state_ディctの使用詳細は小編が皆さんに提供したすべての内容です。参考にしていただければ幸いです。どうぞよろしくお願いします。