0

我制作了以灰度图像作为输入并返回单个值作为输出的模型。这个模型的主干基本上是 resnet18,但是因为它需要不同的输入/输出,所以我对其进行了修改。

model = models.resnet18(pretrained=True)
model.conv1 = nn.Conv2d(1, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)
model = nn.Sequential(model,nn.Linear(1000,1))

该模型在测试数据集上运行良好,因此我决定使用 Grad CAM 制作激活热图。

class model(nn.Module):
def __init__(self):
    super(model,self).__init__()
    
    self.model = torch.load('model.pth')
            
    self.features=nn.Sequential( "STACKED ARCHITECTURES")

    
    self.avgpool = nn.AdaptiveAvgPool2d(output_size=(1, 1))
    self.classifier = nn.Sequential(nn.Linear(in_features=512, out_features=1000, bias=True),
                                    nn.Linear(in_features=1000, out_features=1, bias=True))
    self.gradient = None
    
# hook for the gradients
def activations_hook(self, grad):
    self.gradient = grad

def get_gradient(self):
    return self.gradient

def get_activations(self, x):
    return self.features(x)

def forward(self, x):
    identity = x
    
    x = self.features(x)        # extract the features
    
   
    h = x.register_hook(self.activations_hook)
    
    # complete the forward pass
    x = self.avgpool(x)
    x = x.view((1, -1))
    x = self.classifier(x)
    
    return x 

然后,在我尝试使用下面的代码启动它之后,我总是面对 TypeError

model = model()
_ = model.eval()
image, _ = next(iter(grad_loader))
pred = model(image)

类型错误:forward() 缺少 1 个必需的位置参数:'x'

任何人都可以提供任何建议来解决这个问题吗?

ps Dataloader(grad_loader) 在我训练模型时工作正常,所以我认为 dataloader 可能不是问题

4

0 回答 0