[Python] Pytorch model accuracy test

Discussão em 'Python' iniciado por Stack, Outubro 26, 2024.

  1. Stack

    Stack Membro Participativo

    I'm using Pytorch to classify a series of images. The NN is defined as follows:

    model = models.vgg16(pretrained=True)
    model.cuda()
    for param in model.parameters(): param.requires_grad = False

    classifier = nn.Sequential(OrderedDict([
    ('fc1', nn.Linear(25088, 4096)),
    ('relu', nn.ReLU()),
    ('fc2', nn.Linear(4096, 102)),
    ('output', nn.LogSoftmax(dim=1))
    ]))

    model.classifier = classifier


    The criterions and optimizers are as follows:

    criterion = nn.NLLLoss()
    optimizer = optim.Adam(model.classifier.parameters(), lr=0.001)


    My validation function is as follows:

    def validation(model, testloader, criterion):
    test_loss = 0
    accuracy = 0
    for images, labels in testloader:

    images.resize_(images.shape[0], 784)

    output = model.forward(images)
    test_loss += criterion(output, labels).item()

    ps = torch.exp(output)
    equality = (labels.data == ps.max(dim=1)[1])
    accuracy += equality.type(torch.FloatTensor).mean()

    return test_loss, accuracy


    This is the piece of code that is throwing the following error:


    RuntimeError: input has less dimensions than expected
    ​

    epochs = 3
    print_every = 40
    steps = 0
    running_loss = 0
    testloader = dataloaders['test']

    # change to cuda
    model.to('cuda')

    for e in range(epochs):
    running_loss = 0
    for ii, (inputs, labels) in enumerate(dataloaders['train']):
    steps += 1

    inputs, labels = inputs.to('cuda'), labels.to('cuda')

    optimizer.zero_grad()

    # Forward and backward passes
    outputs = model.forward(inputs)
    loss = criterion(outputs, labels)
    loss.backward()
    optimizer.step()

    running_loss += loss.item()

    if steps % print_every == 0:
    model.eval()
    with torch.no_grad():
    test_loss, accuracy = validation(model, testloader, criterion)

    print("Epoch: {}/{}.. ".format(e+1, epochs),
    "Training Loss: {:.3f}.. ".format(running_loss/print_every),
    "Test Loss: {:.3f}.. ".format(test_loss/len(testloader)),
    "Test Accuracy: {:.3f}".format(accuracy/len(testloader)))

    running_loss = 0


    Any help?

    Continue reading...

Compartilhe esta Página