Bert+Resnet联合学习,pytorch模型实例化后为空

Bert+Resnet联合学习,pytorch模型实例化后为空,pytorch,resnet,bert-language-model,torchvision,Pytorch,Resnet,Bert Language Model,Torchvision,我正在写一个简单的联合模型,它有两个分支,一个分支是resnet50,另一个是bert。我将两个输出连接起来,并将其传递给一个简单的线性层,该层有两个输出神经元 我实现了以下模型: import torch from torch import nn import torchvision.models as models import torch.nn as nn from collections import OrderedDict from transformers import BertMo

我正在写一个简单的联合模型,它有两个分支,一个分支是resnet50,另一个是bert。我将两个输出连接起来,并将其传递给一个简单的线性层,该层有两个输出神经元

我实现了以下模型:

import torch
from torch import nn
import torchvision.models as models
import torch.nn as nn
from collections import OrderedDict
from transformers import BertModel

class BertResNet(nn.Module):
    def __init__(self):
        super(BertResNet, self).__init__()
        # resnet
        resnet50 = models.resnet50(pretrained=True)
        n_inputs = resnet50.fc.in_features
        # compressed embedding space
        classifier = nn.Sequential(OrderedDict([
            ('fc1', nn.Linear(n_inputs, 512))
        ]))

        resnet50.fc = classifier # 512 out resnet 


        bert = BertModel.from_pretrained('bert-base-uncased')

        # final classification layer

        classification = nn.Linear(512 + 768, 2)
        #print(resnet50)
        #print(bert)

    def forward(self, img, text):
        res_emb = self.resnet50(img)
        bert_emb = self.bert(text)

        combined = torch.cat(res_emb,
                              bet_emb, dim=1)
        out = self.classification(combined)
        return out
但当我实例化时,我得到一个空模型:

bert_resnet = BertResNet()

print(bert_resnet)
输出: 贝特雷斯内特


listbert_resnet.parameters还返回[]

您从未将模型分配给BertResNet类的对象的任何属性。__init__方法中存在临时变量,但一旦完成,这些变量将被丢弃。应将其分配给self:

定义初始自我: superBertResNet,self.\u init__ resnet self.resnet50=models.resnet50pretrained=True n_输入=self.resnet50.fc.in_功能 压缩嵌入空间 self.classifier=nn.SequentialOrderedDict[ “fc1”,nn.Linearn_输入,512 ] self.resnet50.fc=分类器512 out resnet self.bert=BertModel.from_预训练的'bert-base-uncased' 最终分类层 自分类=nn.Linear512+768,2