В настоящее время я работаю над проектом онлайн-курса, который я прохожу.Этот конкретный проект о создании классификатора изображений в 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)))
. Я бы ожидал, что точность и потери будут улучшаться на каждом этапе.Однако вместо этого они колеблются вокруг определенного значения.К сожалению, я не уверен, является ли проблема самой моделью или расчетом потерь и точности.
Спасибо за чтение!