向现有的 Chainer 网络添加额外的输出

Add extra output to existing Chainer network

假设我创建了一个简单的全连接网络:

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 输出训练这个模型,然后在训练之后,在微调网络之前 添加额外的输出

我找到了移除最后一层以便重新训练新的最后一层的方法,但这不是我想要的:我想保持现有输出的权重.新输出的权重将随机初始化。

如何引入一个额外的线性层 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.

连接两个输出