Pytorch 读取resnet18的测试图像

Pytorch 读取resnet18的测试图像,pytorch,resnet,transfer-learning,Pytorch,Resnet,Transfer Learning,我正在尝试读取图像文件,并对图像进行分类和处理。 我的模型是resnet18,我之前训练过它,并计划使用不同的.py脚本对图像列表进行分类。这是我的网络: PATH = './net.pth' model_ft = models.resnet18(pretrained=True) num_ftrs = model_ft.fc.in_features model_ft.fc = nn.Linear(num_ftrs, 16) model_ft.load_state_dict(torch.load(

我正在尝试读取图像文件,并对图像进行分类和处理。 我的模型是resnet18,我之前训练过它,并计划使用不同的.py脚本对图像列表进行分类。这是我的网络:

PATH = './net.pth'
model_ft = models.resnet18(pretrained=True)
num_ftrs = model_ft.fc.in_features
model_ft.fc = nn.Linear(num_ftrs, 16)
model_ft.load_state_dict(torch.load(PATH))
model_ft.eval() 
我试着以这种方式阅读图像:

imsize = 256
loader = transforms.Compose([transforms.Scale(imsize), transforms.ToTensor()])
def image_loader(image_name):
    #load image, returns cuda tensor
    image = Image.open(image_name)
    image = loader(image).float()
    image = Variable(image, requires_grad=True)
    image = image.unsqueeze(0)
    return image.cuda()  

image = image_loader("dataset/test/9673.png")

model_ft(image)
我得到这个错误:

 "Given groups=1, weight of size [64, 3, 7, 7], expected input[1, 4, 676, 256] to have 3 channels, but got 4 channels instead"
有人建议我删除resnet18的unsqueze,这样做会导致以下错误:

"Expected 4-dimensional input for 4-dimensional weight [64, 3, 7, 7], but got 3-dimensional input of size [4, 676, 256] instead"

我不太理解我正在处理的问题,我应该如何阅读我的测试集?之后我需要将类ID-s和文件名写入.txt。

您使用的是具有4个通道的PNG图像。您的网络需要3个频道。 转换到
RGB
,你应该会没事的。在您的
图像\u加载程序中
只需执行以下操作:

image=image.open(image\u name.convert('RGB'))

您使用的是具有4个通道的PNG图像。您的网络需要3个频道。 转换到
RGB
,你应该会没事的。在您的
图像\u加载程序中
只需执行以下操作:

image=image.open(image\u name.convert('RGB'))

我认为您的图像输入的形状是:
批次大小*4*高度*宽度
而不是
批次大小*3*高度*宽度
。这就是错误的原因。您是否可以执行此操作并报告形状:


print(image.shape)
调用
image\u loader()

后,我认为您的图像输入的形状是:
batch\u size*4*height*width
而不是
batch\u size*3*height*width
。这就是错误的原因。您是否可以执行此操作并报告形状:

调用
image\u loader()
后打印(image.shape)