3D-тензоры ожидают 2 значения для padding Torch - PullRequest
0 голосов
/ 19 июня 2020

Я успешно обучил и протестировал свою модель, используя этот учебник, и я хочу протестировать свою модель, используя отдельные изображения. Вот мой код

import torchvision.datasets as dset
import torchvision.transforms as transforms
from torch.utils.data import DataLoader,Dataset
import matplotlib.pyplot as plt
import torchvision.utils
import numpy as np
import random
from PIL import Image
import torch
from torch.autograd import Variable
import PIL.ImageOps    
import torch.nn as nn
from torch import optim
import torch.nn.functional as F
import os

class Config():
    training_dir = "./data/faces/training/"
    testing_dir = "./data/faces/testing/"
    train_batch_size = 80
    train_number_epochs = 100

class SiameseNetworkDataset(Dataset):
    ...

class SiameseNetwork(nn.Module):
    ...

class ContrastiveLoss(torch.nn.Module):
    ...

if __name__=='__main__':
    net = SiameseNetwork().cuda()
    net.load_state_dict(torch.load("model.pt"))
    img0 = Image.open(os.path.join('data', 'faces', 'testing', 's5', '2.png'))
    img1 = Image.open(os.path.join('data', 'faces', 'testing', 's5', '1.png'))
    img0 = img0.convert("L")
    img1 = img1.convert("L")

    img0 = PIL.ImageOps.invert(img0)
    img1 = PIL.ImageOps.invert(img1)
    transform=transforms.Compose([transforms.Resize((100,100)),
                                    transforms.ToTensor()
                                    ])
    img0 = transform(img0)
    img1 = transform(img1)
    img0 = img0.cuda()
    img1 = img1.cuda()
    output1,output2 = net(Variable(img0).cuda(),Variable(img1).cuda()) //The error occurred here
    euclidean_distance = F.pairwise_distance(output1, output2)
    print(euclidean_distance.cpu().data.numpy())

И у меня следующая ошибка: AssertionError: 3D tensors expect 2 values for padding. Не могу понять, что не так, потому что я использую ту же предварительную обработку, что и в SiameseNetworkDataset

...