Несоответствие размера Pytorch - PullRequest
0 голосов
/ 14 апреля 2020

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

RuntimeError: size mismatch, m1: [64 x 17920], m2: [5376 x 1024] at /pytorch/aten/src/THC/generic/THCTensorMathBlas.cu:290

Я не уверен, есть ли ошибка в моей Con vNet

У меня есть 6354 изображения в моем тренировочном наборе и 1589 в моем тестовом наборе с размерами 3, 75, 100.

Это мой код:

class ConvNet(nn.Module):

def __init__(self):
    super().__init__()
    a = 64 
    b = 128 
    c = 256 

    d = 1024
    e = 2048

    self.conv1 = nn.Conv2d(3, a, 3)
    self.conv2 = nn.Conv2d(a, b, 3)
    self.conv3 = nn.Conv2d(b, c, 3)

    self.fc1 = nn.Linear(3*7*c, d) 
    self.fc2 = nn.Linear(d, e)
    self.fc3 = nn.Linear(e, 2)

def forward(self, x):
    x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
    x = F.max_pool2d(F.relu(self.conv2(x)), (2, 2))
    x = F.max_pool2d(F.relu(self.conv3(x)), (2, 2))

    x = x.view(x.size(0), -1)
    x = F.relu(self.fc1(x))
    x = F.relu(self.fc2(x))
    x = F.dropout(x, 0.5)
    x = self.fc3(x)
    return x

net = ConvNet()


epochs = 100
steps = 0
train_losses, test_losses = [], []
for e in range(epochs):
running_loss = 0
net.train()
for images, labels in train_loader:   
    if torch.cuda.is_available():
        images, labels = images.cuda(), labels.cuda()     
    optimizer.zero_grad()
    log_ps = net(images)
    loss = loss_function(log_ps, labels)
    loss.backward()
    optimizer.step()        
    running_loss += loss.item()        
else:
    test_loss = 0
    accuracy = 0        
    net.eval()
    with torch.no_grad():
        for images, labels in test_loader:
            if torch.cuda.is_available():
                images, labels = images.cuda(), labels.cuda()
            log_ps = net(images)
            test_loss += loss_function(log_ps, labels)                
            # ps = torch.exp(log_ps)
            top_p, top_class = log_ps.topk(1, dim=1)
            equals = top_class.long() == labels.long().view(*top_class.shape)
            accuracy += torch.mean(equals.type(torch.FloatTensor))                
    train_losses.append(running_loss/len(train_loader))
    test_losses.append(test_loss/len(test_loader))
    print("[Epoch: {}/{}] ".format(e+1, epochs),
          "[Training Loss: {:.3f}] ".format(running_loss/len(train_loader)),
          "[Test Loss: {:.3f}] ".format(test_loss/len(test_loader)),
          "[Test Accuracy: {:.3f}]".format(accuracy/len(test_loader)))

Я не уверен, что Мне нужно сделать, чтобы соответствовать размеру, чтобы тренировать мои модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...