我目前正在研究两个使用不同类型数据但又相互连接的模型。我想创建一个组合模型,它接受每种数据类型的一个实例,独立地在每个预先训练的模型中运行它们,然后通过顶部的几个前馈层处理两个不同模型的组合输出。到目前为止,我已经了解到我可以向前更改以接受两个输入,所以我只是将我的单个模型的结构克隆到组合模型中,使用向前(右(的层分别处理它们,然后根据指定合并输出。我遇到的问题是想办法实现这一点。
正如我从你的问题中了解到的那样,你可以创建两个模型,然后你需要第三个模型,它将神经网络与正向相结合,在__main__
中,你可以load_state_dict
例如:
第一个型号
class FirstM(nn.Module):
def __init__(self):
super(FirstM, self).__init__()
self.fc1 = nn.Linear(20, 2)
def forward(self, x):
x = self.fc1(x)
return x
第二种型号
class SecondM(nn.Module):
def __init__(self):
super(SecondM, self).__init__()
self.fc1 = nn.Linear(20, 2)
def forward(self, x):
x = self.fc1(x)
return x
在这里,您可以创建一个模型,可以将两个模型合并到其中,如下所示:
class Combined_model(nn.Module):
def __init__(self, modelA, modelB):
super(Combined_model, self).__init__()
self.modelA = modelA
self.modelB = modelB
self.classifier = nn.Linear(4, 2)
def forward(self, x1, x2):
x1 = self.modelA(x1)
x2 = self.modelB(x2)
x = torch.cat((x1, x2), dim=1)
x = self.classifier(F.relu(x))
return x
然后在分类之外,你可以按照
# Create models and load state_dicts
modelA = FirstM()
modelB = SecondM()
# Load state dicts
modelA.load_state_dict(torch.load(PATH))
modelB.load_state_dict(torch.load(PATH))
model = Combined_model(modelA, modelB)
x1, x2 = torch.randn(1, 10), torch.randn(1, 20)
output = model(x1, x2)