Сбросить параметры нейросети в pytorch

У меня есть нейронная сеть со следующей структурой:

class myNetwork(nn.Module):
    def __init__(self):
        super(myNetwork, self).__init__()
        self.bigru = nn.GRU(input_size=2, hidden_size=100, batch_first=True, bidirectional=True)
        self.fc1 = nn.Linear(200, 32)
        torch.nn.init.xavier_uniform_(self.fc1.weight)
        self.fc2 = nn.Linear(32, 2)
        torch.nn.init.xavier_uniform_(self.fc2.weight)

Мне нужно восстановить модель в необученное состояние, сбросив параметры нейронной сети. Я могу сделать это для nn.Linear слоев, используя следующий метод:

def reset_weights(self):
    torch.nn.init.xavier_uniform_(self.fc1.weight)
    torch.nn.init.xavier_uniform_(self.fc2.weight)

Но, чтобы сбросить вес слоя nn.GRU, я не смог найти такого фрагмента.

Мой вопрос: как сбросить слой nn.GRU? Любой другой способ сброса сети также подойдет. Любая помощь приветствуется.


person learner    schedule 28.08.2020    source источник


Ответы (2)


Вы можете использовать метод reset_parameters на слое. Как указано здесь

for layer in model.children():
   if hasattr(layer, 'reset_parameters'):
       layer.reset_parameters()

Или другим способом было бы сначала сохранить модель, а затем перезагрузить состояние модуля. Использование torch.save и torch.load подробнее см. в документации Или Сохранение и загрузка моделей

person Dishin H Goyani    schedule 28.08.2020

Новичок в pytorch, интересно, может ли это быть решением :)

Предположим, что модель унаследована от torch.nn.module,

чтобы сбросить его на нули:

dic = Model.state_dict()
for k in dic:
    dic[k] *= 0
Model.load_state_dict(dic)
del(dic)

сбросить его случайным образом

dic = Model.state_dict()
for k in dic:
    dic[k] = torch.randn(dic[k].size())  
Model.load_state_dict(dic)
del(dic)
person Jiayi Pan    schedule 19.07.2021