Я переключился на использование Версии с параметризованным количеством слоев torch.nn.Module
, как Net_par
ниже, только чтобы узнать, что все сохраненные state_dict
были пусты после некоторой оптимизации. ^^
Этот метод является рекомендуемой операцией сохранения (https://pytorch.org/docs/stable/notes/serialization.html#recommend -saving-models ), неподвижные слои, сохраненные в векторе (или, если на то пошло, кортеж), отбрасываются при построении state_dict
.
torch.save
работает правильно, в отличие от, но добавляет к данным и ограничивает надежность. Это немного похоже на ошибку, кто-нибудь может помочь с обходным решением?
Минимальный пример для сравнения между параметризованным и фиксированным количеством слоев:
import torch
import torch.nn as nn
class Net_par(nn.Module):
def __init__(self,layer_dofs):
super(Net_par, self).__init__()
self.layers=[]
for i in range(len(layer_dofs)-1):
self.layers.append(nn.Linear(layer_dofs[i],layer_dofs[i+1]))
def forward(self, x):
for i in range(len(self.layers)-1):
x = torch.tanh(self.layers[i](x))
return torch.tanh(self.layers[len(self.layers)-1](x))
class Net_sta(nn.Module):
def __init__(self,dof1,dof2):
super(Net_sta, self).__init__()
self.layer=nn.Linear(dof1,dof2)
def forward(self, x):
return torch.tanh(self.layer1(x))
if __name__=="__main__":
net_par=Net_par((3,4))
net_sta=Net_sta(3,4)
print(str(net_par.state_dict()))
#OrderedDict() <------Why?!
print(str(net_sta.state_dict()))
#OrderedDict([('layer.weight', tensor([[...
# ...]])), ('layer.bias', tensor([... ...]))])