2016-06-06 2 views
0

nn.MM требует аргумент таблицы матриц, которые будут умножаться. В моем случае одной из матриц является выход некоторой ранее определенной модели (например, nn.Sequential), а другой - только постоянная матрица. Как я могу вставить константу в конвейер nn, и должен ли я беспокоиться, что оптимизатор начнет менять его, если я это сделаю?torch/nn: Каков канонический способ умножения на постоянную матрицу?

Я знаю, что я мог бы решить эту проблему путем инъекции:

  1. писать свой собственный nn.Module. Это кажется тяжелым.
  2. Ломать модель на две части и вручную вводить константу. Я действительно хочу, чтобы модель была просто подклассом nn.Module, который вызывается с :forward(input) и позволяет потребителям быть в блаженном неведении о существовании константы.
  3. Использование nn.ParallelTable, но это также обеспечит постоянную модель потребителей.
  4. Использование nn.Linear без смещения и перезаписи весов. Я просто не знаю, как предотвратить оптимизацию от обновления.

ответ

0

Вы можете создать nn.Linear и переопределение в: accGradParameters быть функцией не-Op

m = nn.Linear(100,200) 
-- copy your weights/bias into m.weight/m.bias 
m.accGradParameters = function() end 
-- m is a constant multiplier thing 
+0

Это несколько удивительно, что обезьяна латание это даже работает с 'torch.save' и' torch.load'. Я возьму это. –

Смежные вопросы