我想在我的模型中强制对称,例如
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))
假设我的模型具有动态层配置,我希望有一个最小的工作示例。
您的问题中不清楚的是您是否想要在一个模型上对称(“在我的模型中强制对称”)还是在两个模型之间(当您介绍
model1
和model2
时暗示)。
如果您想在单个模型上强制对称,您可以最小化
model(x,y)
和 model(y,x)
之间的距离吗?在这种情况下,您只需要一个模型和一个优化器,
在 model
上强制执行该属性,而不是在两个不同的模型上强制执行。
此外,我不清楚通过区分
model1
和 model2
会得到什么:model1
会 model2
是“对称的”... model2
定义为 x,y: model1(y,x)
就足够了,不?也许还有更多,您确实想要两个模型?