【问题标题】:Pytorch : RuntimeError: mat1 dim 1 must match mat2 dim 0Pytorch:RuntimeError:mat1 dim 1 必须匹配 mat2 dim 0
【发布时间】:2021-04-09 02:06:28
【问题描述】:

使用 resnet50 模型。自定义最后一层,它显示运行时错误..我是 PyTorch 的新手,我不断收到错误 mat1 dim1 must match mat1 dim0

这是我的网络代码

from torchvision import models
model = models.resnet50(pretrained=True)

for param in model.parameters():
    param.requires_grad = False
    
class Identity(nn.Module):
    def __init__(self):
        super(Identity, self).__init__()
    def forward(self, x):
        return x

    
model.avgpool = Identity()
model.fc = nn.Linear(2048, 2, bias=True)

for param in model.fc.parameters():
    param.requires_grad = True
model = model.to(device)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.01)



def train(num_epoch, model):
    for epoch in range(0, 3):
        losses = []
        model.train()
        loop = tqdm(enumerate(train_loader), total=len(train_loader))
        for batch_idx, (data, targets) in loop:
            data = data.to(device=device)
            targets = targets.to(device=device)
            scores = model.forward(data)
            loss = criterion(scores, targets)

            optimizer.zero_grad()
            losses.append(loss)
            loss.backward()
            optimizer.step()

            loop.set_description(f"Epoch {epoch+1}/{num_epoch} process: {int((batch_idx / len(train_loader)) * 100)}")
            loop.set_postfix(loss=loss.data.item())

train(1, model)

RuntimeError: mat1 dim 1 必须匹配 mat2 dim 0

【问题讨论】:

    标签: python machine-learning deep-learning pytorch


    【解决方案1】:

    此错误来自您更改的nn.Linear
    回想一下,nn.Linear 计算一个简单的矩阵点积,因此来自前一层的输入维度必须等于weight 矩阵形状(您将其设置为2048)。 我的猜测是,由于您删除了model.avgpool 层,您现在有超过 2048 个输入维度,从而导致您得到错误。


    顺便说一句,你不需要自己实现“身份”层,pytorch已经有nn.Identity

    【讨论】:

      猜你喜欢
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 2021-02-28
      • 2021-10-12
      • 2018-10-05
      相关资源
      最近更新 更多