Обучаемая комбинация весов двух моделей - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь оптимизировать комбинацию двух обученных моделей, используя обучаемые коэффициенты, чтобы сделать комбинацию.

Для этого я использую две переменные nn.Parameter:

self.linwA = nn.Parameter(abs(torch.randn(1)),requires_grad=True)
self.linwB = nn.Parameter(abs(torch.randn(1)),requires_grad=True)

И я пытаюсь умножить две загруженные модели на эти параметры (по одному для каждой). Я только хочу обучить эти два параметра, поэтому только у них есть «require_grad = True», все остальное установлено в false.

Однако, единственный способ, которым я нашел это, - это умножить коэффициент на каждое значение в state_dict (), вот так:

for k, v in modelA.state_dict().items():
    modelA.state_dict()[k][:] = linwA.expand_as(v)*modelA.state_dict()[k][:]

А потом я добавляю две модели. Это работает для вывода, результирующая модель является комбинацией двух, но когда я хочу использовать это для обучения параметров, функция потерь (nn.MSELoss) приводит к скалярному тензору без grad_fn, вызывая следующую ошибку: " RuntimeError: элемент 0 тензоров не требует grad и не имеет grad_fn".

Я подозреваю, что во время умножения тензоры не сохраняют параметр require_grad, но я не действительно знаю, что изменить или альтернативу ему.

Есть предложения? : /

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