【发布时间】:2021-08-19 16:31:09
【问题描述】:
我正在尝试在pytorch 中实现一个 FCN,其整体结构如下:
到目前为止的代码如下所示:
class SNet(nn.Module):
def __init__(self):
super(SNet, self).__init__()
self.enc_a = encoder(...)
self.dec_a = decoder(...)
self.enc_b = encoder(...)
self.dec_b = decoder(...)
def forward(self, x1, x2):
x1 = self.enc_a(x1)
x2 = self.enc_b(x2)
x2 = self.dec_b(x2)
x1 = self.dec_a(torch.cat((x1, x2), dim=-1)
return x1, x2
在keras 中,使用函数式API 相对容易做到这一点。但是,我在pytorch 中找不到任何具体的示例/教程。
- 如何在训练后丢弃
dec_a(自动编码器分支的解码器部分)? - 在联合训练期间,
loss将是来自两个分支的loss的总和(可选加权)?
【问题讨论】:
-
你可以设置
model.dec_a = nn.Identity(),让它不再做任何事情,只返回输入。这就是你要找的吗? -
> 你可以设置 model.dec_a = nn.Identity() 如果我没记错的话还是会执行不必要的计算?
-
它将用一个无操作层替换
dec_a。所以原来的dec_a执行的计算将不再发生。 -
我不能在没有
dec_a的情况下创建新模型并使用训练网络中的相应块初始化权重吗? -
你可以。这相当于同一件事。如果您担心开销,可以查看
nn.Identity()(pytorch.org/docs/stable/_modules/torch/nn/modules/…) 的来源;它实际上只是返回输入而不做任何事情。
标签: machine-learning pytorch autoencoder