pytoch状態辞書:state_使用詳細


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」です。

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の使用詳細は小編が皆さんに提供したすべての内容です。参考にしていただければ幸いです。どうぞよろしくお願いします。