Как я могу сделать так, чтобы точность модели перестала колебаться вокруг определенного значения и вместо этого улучшала ее? - PullRequest
0 голосов
/ 10 мая 2019

В настоящее время я работаю над проектом онлайн-курса, который я прохожу.Этот конкретный проект о создании классификатора изображений в Python с использованием pytorch.К сожалению, точность модели не улучшается.Вместо этого она колеблется между 0.015 и 0.005.

. Я работаю над этой конкретной проблемой последние несколько дней и не могу понять, в чем проблема.Я попробовал более и менее сложные классификаторы, а также различные вероятности отсева и заменил метод topk() на функцию torch.max (), но результат не изменился качественно.Я также пытался начать все сначала, но безрезультатно.Поэтому любой вклад, который вы могли бы получить, высоко ценится.

Ниже приводится выдержка из проекта

for epoch in range(epochs):
    train_loss = 0
    for images, labels in trainloader:
        step += 1
        images, labels = images.to('cuda'), labels.to('cuda')
        model.train()
        optimizer.zero_grad()

        # Forward images
        yhat = model(images)

        # Calculate Loss
        loss = criterion(yhat,labels)
        train_loss += loss.item()

        # Update model
        loss.backward()
        optimizer.step()

        # Validate
        if True:
            val_loss = 0
            accuracy = 0
            with torch.no_grad():
                for images, labels in valloader:
                    model.eval()
                    images, labels = images.to('cuda'), labels.to('cuda')
                    yhat = model(images)
                    loss = criterion(yhat,labels)
                    val_loss += loss.item()

                    # Accuracy
                    _, predictions = torch.max(yhat, 1)
                    equals = predictions == labels.data
                    accuracy += torch.mean(equals.type(torch.FloatTensor))
                print('Step: {}; Validation Loss: {}'.format(step,val_loss/len(valloader)))
                print('Step: {}; Validation Accuracy: {}'.format(step,accuracy/len(valloader)))
    print('Epoch: {}; Training Loss: {}'.format(epoch,train_loss/len(trainloader)))

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

Спасибо за чтение!

...