100% точность для многоклассовой классификацииPython

Программы на Python
Ответить
Anonymous
 100% точность для многоклассовой классификации

Сообщение Anonymous »

Я обучаю модель для задачи классификации по нескольким меткам для каждого класса. У меня есть несколько меток после запуска теста, я получил 100% для обоих классов
Я использовал 150 000 изображений для обучения и проверки и 30 000 изображений для тест, и я использую предварительно обученную модель mobilenet_v2, функцию потерь CrossEntropy
это функция расчета _accuracy, которую я использовал

Код: Выделить всё

def calculate_metrics(output, target):
_, predicted_action = output['action_name'].cpu().max(1)
gt_action = target['action_name'].cpu()

_, predicted_condition = output['condition'].cpu().max(1)
gt_condition = target['condition'].cpu()

with warnings.catch_warnings():  # sklearn may produce a warning when processing
zero row in confusion matrix
warnings.simplefilter("ignore")
accuracy_action = accuracy_score(y_true=gt_action.numpy(), y_pred=predicted_action.numpy())
accuracy_condition = accuracy_score(y_true=gt_condition.numpy(), y_pred=predicted_condition.numpy())

return accuracy_action, accuracy_condition
а это сценарий обучения и проверки

Код: Выделить всё

n_train_samples = len(train_dataloader)
print("Starting training ...")

for epoch in range(start_epoch, N_epochs + 1):
total_loss = 0
accuracy_action = 0
accuracy_condition = 0

for batch in train_dataloader:
optimizer.zero_grad()

img = batch['img']
target_labels = batch['labels']
target_labels = {t: target_labels[t].to(device) for t in target_labels}
output = model(img.to(device))

loss_train, losses_train = model.get_loss(output, target_labels)
total_loss += loss_train.item()
batch_accuracy_action, batch_accuracy_condition = \
calculate_metrics(output, target_labels)

accuracy_action += batch_accuracy_action
accuracy_condition += batch_accuracy_condition

loss_train.backward()
optimizer.step()

print("epoch {:4d}, loss: {:.4f}, action: {:.4f}, condition: {:.4f}".format(
epoch,
total_loss / n_train_samples,
accuracy_action / n_train_samples,
accuracy_condition / n_train_samples))

logger.add_scalar('train_loss', total_loss / n_train_samples, epoch)

if epoch % 5 == 0:
validate(model, val_dataloader, logger, epoch, device)
checkpoint_save(model, savedir, epoch)
и это функция проверки

Код: Выделить всё

def validate(model, dataloader, logger, iteration, device, checkpoint=None):
if checkpoint is not None:
checkpoint_load(model, checkpoint)

model.eval()
with torch.no_grad():
avg_loss = 0
accuracy_action = 0
accuracy_condition = 0

for batch in dataloader:
img = batch['img']
target_labels = batch['labels']
target_labels = {t: target_labels[t].to(device) for t in target_labels}
output = model(img.to(device))

val_train, val_train_losses = model.get_loss(output, target_labels)
avg_loss += val_train.item()
batch_accuracy_action, batch_accuracy_condition = \
calculate_metrics(output, target_labels)

accuracy_action += batch_accuracy_action
accuracy_condition += batch_accuracy_condition

n_samples = len(dataloader)
avg_loss /= n_samples
accuracy_action /= n_samples
accuracy_condition /= n_samples

print('-' * 72)
print("Validation  loss: {:.4f}, action: {:.4f}, condition: {:.4f}\n".format(
avg_loss, accuracy_action, accuracy_condition))

logger.add_scalar('val_loss', avg_loss, iteration)
logger.add_scalar('val_accuracy_action', accuracy_action, iteration)
logger.add_scalar('val_accuracy_condition', accuracy_condition, iteration)

model.train()
Меня смущает 100% точность для обоих классов. Я не думаю, что со сценарием что-то не так, есть ли какое-нибудь объяснение?

Подробнее здесь: https://stackoverflow.com/questions/793 ... sification
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»