コード例 #1
0
ファイル: train.py プロジェクト: yesxiaoyu/Project
        loss = criterion(logits, labels)
        loss.backward()
        optimizer.step()
        batch_size = (labels != -1).long().sum().item()
        total_loss += batch_size * loss.item()
        total_samples += batch_size
        preds_collection.append(preds)
        labels_collection.append(labels)
        # if i % 100 == 0:
        #     print('[epoch %d] [step %d] [loss %.4f]' % (epoch, i, loss.item()))
    preds_collection = torch.cat(preds_collection, dim=0)
    labels_collection = torch.cat(labels_collection, dim=0)
    mask = labels_collection != -1
    preds_collection = preds_collection.masked_select(mask).cpu().numpy()
    labels_collection = labels_collection.masked_select(mask).cpu().numpy()
    train_precision = precision_score(y_true=labels_collection, y_pred=preds_collection, labels=[0, 1], average='macro')
    train_recall = recall_score(y_true=labels_collection, y_pred=preds_collection, labels=[0, 1], average='macro')
    train_f1 = f1_score(y_true=labels_collection, y_pred=preds_collection, labels=[0, 1], average='macro')
    train_loss = total_loss / total_samples
    print('epoch: %d\ttrain\tloss: %.4f\tprecision: %.4f\trecall: %.4f\tf1: %.4f' % (epoch, train_loss, train_precision, train_recall, train_f1))
    val_loss, val_precision, val_recall, val_f1 = eval(tagger, val_loader, criterion)
    print('epoch: %d\tval\tloss: %.4f\tprecision: %.4f\trecall: %.4f\tf1: %.4f\n' % (epoch, val_loss, val_precision, val_recall, val_f1))
    visualizer.add(epoch, train_loss, train_precision, train_recall, train_f1, val_loss, val_precision, val_recall, val_f1)
    if val_f1 > max_val_f1_score:
        max_val_f1_score = val_f1
        torch.save(tagger, save_path)
        print('save model')

print('max val f1_score: %.4f' % max_val_f1_score)

visualizer.plot()