Я новичок в кодировании и путаюсь между средней точностью и общей точностью. Я создал функцию для расчета точности, затем я делю этот результат на len (загрузчик данных) в конце каждой эпохи. Это правильный способ расчета средней точности? Если нет, может ли кто-нибудь объяснить, как мне правильно это сделать?
def accuracy(predictions, labels):
classes = torch.argmax(predictions, dim=1)
return torch.mean((classes == labels).float())
def train(model, optimizer, dataloader):
#Setting model to train mode
model.train()
acc = 0.0
loss = 0.0
loss_fc = nn.CrossEntropyLoss()
for i, (img, label) in enumerate(dataloader):
#source images and labels to cpu device
img, label = img.to(device), label.to(device)
y_pred = model(img)
optimizer.zero_grad()
loss = loss_fc(y_pred, label)
loss.backward()
optimizer.step()
#Update loss and accuracy
loss += loss.item()
acc += accuracy(y_pred, s_label)
loss /= len(dataloader)
acc /= len(dataloader)
Это звучит либо как вопрос по математике, либо как теоретический вопрос по машинному обучению, а не как вопрос о написании кода. В любом случае, если вы «новичок в кодировании», не пытайтесь заниматься машинным обучением. Сначала изучите основы, следуя руководству по Python до конца.
@KarlKnechtel извинения, этот вопрос не хотел задевать за живое. Хорошего дня!
Я не расстроен. Я просто пытаюсь помочь вам найти лучший способ сделать что-то и избежать проблем для себя в будущем.
Не уверен, что вы имеете в виду под общей и средней точностью. Обычно точность вычисляется в конце каждой эпохи. Вы передаете функции точности свои прогнозы и свои фактические метки, и она возвращает ту пропорцию, которую вы получили в виде десятичной дроби (0-1).
Я не видел никакого смысла в вычислении средней точности для каждой эпохи во время обучения, так как на этот показатель будет сильно влиять скорость обучения вашей модели, а не то, насколько хорошо она способна в конечном итоге работать, например. модель, которой нужно много эпох, чтобы работать хорошо, вероятно, окажется хуже при этой средней точности, чем модель, которая может сходиться за меньшее количество эпох.
Если вы посмотрите на метрику оценки точности от scikit-learn, она должна помочь вам прояснить ситуацию.
Связь: https://scikit-learn.org/stable/modules/generated/sklearn.metrics.accuracy_score.html
Надеюсь это поможет!
@KarlKnechtel Как уже упоминалось, я новичок в кодировании и просто немного запутался. Я пытаюсь понять разницу между оценкой производительности модели с использованием средней точности и общей точности. Я не прошу спецификаций программирования, просто разъяснения, так как я запутался :)