Добавить дополнительный вывод в существующую сеть Chainer - PullRequest
0 голосов
/ 23 октября 2019

Допустим, я создаю простую полностью подключенную сеть:

import chainer
import chainer.functions as F
import chainer.links as L
from chainer import Sequential

model = Sequential(
    L.Linear(n_in, n_hidden),
    F.relu,
    L.Linear(n_hidden, n_hidden),
    F.relu,
    L.Linear(n_hidden, n_out)
)

# Compute the forward pass
y = model(x)

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

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

1 Ответ

1 голос
/ 24 октября 2019

Как насчет введения дополнительного линейного слоя L.Linear(n_hidden, n_extra_out) (без удаления каких-либо существующих), где n_extra_out - количество дополнительных выходов. Затем вы можете извлечь выходные данные из последнего F.relu (вы можете подумать о замене объекта Sequential на экземпляр реализации chainer.Chain для этого, аналогично этому примеру https://github.com/chainer/chainer/blob/master/examples/mnist/train_mnist.py#L16), и передать его каквходы как для вашего последнего подготовленного последнего линейного слоя, так и для этого нового слоя. Затем эти два выхода можно объединить, используя F.concat.

...