Это часть кода, отвечающая за обучение:
Код: Выделить всё
bench_val_loss = 1000
bench_acc = 0.0
epochs = 15
optimizer = optim.Adam(embeddingNet.parameters(), lr=1e-3)
loss_optimizer = torch.optim.Adam(loss_fn.parameters(), lr=1e-3)
scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=3, threshold=0.02)
for epoch in range(1, epochs + 1):
print(f'current lr: {scheduler.get_last_lr()}')
loss=train(embeddingNet, loss_fn, device, train_dataloader, optimizer, loss_optimizer, epoch)
val_loss, accuracy =test(train_dataset, val_dataset, embeddingNet, accuracy_calculator, loss_fn, epoch, val_dataloader)
#val_loss = simpleTest(train_dataset, val_dataset, embeddingNet, accuracy_calculator, loss_fn, epoch, val_dataloader)
torch.save(embeddingNet.state_dict(), 'my/path/mobileNetV3L_ArcFaceLAST.pth')
if accuracy >= bench_acc:
bench_val_loss = val_loss
torch.save(embeddingNet.state_dict(), 'my/path/mobileNetV3L_ArcFaceBEST.pth')
scheduler.step(accuracy)
writer.add_scalars('Training vs. Validation Loss',
{'Training': loss, 'Validation': val_loss},
global_step=epoch+1)
Код: Выделить всё
Test set accuracy (Precision@1) = 0.17834772304046048
current lr: [0.001]
Epoch 3: Loss = 39.68284225463867
Epoch 3: valLoss = 39.9765007019043
100%|██████████| 962/962 [01:43
Подробнее здесь: [url]https://stackoverflow.com/questions/79073506/why-my-pytorch-scheduler-doesnt-seem-to-work-properly[/url]