如何在两个Pytorch模型之间有效共享参数

问题描述 投票:0回答:1

我想在我的模型中强制对称,例如

f(x,y) = f(y,x)
,并希望通过定义两个模型
model1(x,y)
model2(y,x)
来实现它,但让它们具有相同的架构和参数。我可以通过

分享他们的参数
for name, param1 in model1.named_parameters():
    if name in model2.state_dict() and param1.shape == model2.state_dict()[name].shape:
      model2.state_dict()[name].data = param1.data

以这种方式共享参数有意义吗?我必须为每个模型定义两个优化器吗?有吗

optimizer = optim.Adam(list(model1.parameters()) + list(model2.parameters()))  # Combine parameters

有意义,因为模型共享参数,假设我的损失之一是

criterion(model1(x,y), model2(y,x))

假设我的模型具有动态层配置,我希望有一个最小的工作示例。

pytorch parameters shared
1个回答
0
投票

您的问题中不清楚的是您是否想要在一个模型上对称(“在我的模型中强制对称”)还是在两个模型之间(当您介绍

model1
model2
时暗示)。

如果您想在单个模型上强制对称,您可以最小化

model(x,y)
model(y,x)
之间的距离吗?在这种情况下,您只需要一个模型和一个优化器, 在
model
上强制执行该属性,而不是在两个不同的模型上强制执行。

此外,我不清楚通过区分

model1
model2
会得到什么:
model1
model2
是“对称的”...
model2
定义为
x,y: model1(y,x)
就足够了,不?也许还有更多,您确实想要两个模型?

© www.soinside.com 2019 - 2024. All rights reserved.