Загрузка и заморозка предварительно обученной модели для объединения с новой сетью - PullRequest
0 голосов
/ 09 марта 2020

У меня есть подготовленная модель, и я хотел бы построить классификатор поверх нее. Я пытаюсь загрузить и заморозить веса предварительно обученной модели и передать ее результаты новому классификатору, который я хотел бы оптимизировать. Вот что у меня есть, я немного застрял на ошибке TypeError: forward() missing 1 required positional argument: 'x' из строки nn.Sequential:

import model #model.py contains the architecture of the pretrained model

class Classifier(nn.Module):
    def __init__(self):
        ...
    def forward(self, x):
        ...

net = model.Model()
net.load_state_dict(checkpoint["net"])

for c in net.children():
    for param in child.parameters():
        params.requires_grad = False

model = nn.Sequential(nn.ModuleList(net()), Classifier())

Ответы [ 2 ]

0 голосов
/ 09 марта 2020

Я наконец решил эту проблему после обсуждения с @ptrblck с форумов PyTorch. Решение аналогично ответу Шая, только потому, что net содержит экземпляр класса model.Model, вместо этого нужно сделать model = nn.Sequential(net, Classifier()), не вызывая nn.ModuleList().

0 голосов
/ 09 марта 2020

TL; DR

model = nn.Sequential(nn.ModuleList(net), Classifier())

Вы "звоните" net.forward по net(), в отличие от __init__ метода Classifier класс в Classifier().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...