我制作了以灰度图像作为输入并返回单个值作为输出的模型。这个模型的主干基本上是 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 可能不是问题