向现有的 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
.
连接两个输出
假设我创建了一个简单的全连接网络:
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
.