Пустой state_dict с вектором или кортежем слоев в nn.Module - PullRequest
1 голос
/ 02 апреля 2020

Я переключился на использование Версии с параметризованным количеством слоев 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([...   ...]))])

1 Ответ

1 голос
/ 02 апреля 2020

Вам нужно использовать nn.ModuleList() вместо простого python списка.

class Net_par(nn.Module):
    ...
    self.layers = nn.ModuleList([])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...