-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtrain.py
More file actions
48 lines (35 loc) · 1.43 KB
/
Copy pathtrain.py
File metadata and controls
48 lines (35 loc) · 1.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import torch
from utils.utils import Logger
from utils.utils import save_checkpoint, save_checkpoint_epoch
from common.train import *
from evals import test_classifier_adv
kwargs = {}
if 'adv' in P.mode:
from training.adv_train import setup
kwargs['adversary'] = adversary
else:
from training.train import setup
train, fname = setup(P.mode, P)
logger = Logger(fname, ask=not resume)
logger.log(P)
logger.log(model)
# Run experiments
for epoch in range(start_epoch, P.epochs + 1):
logger.log_dirname(f"Epoch {epoch}")
model.train()
if P.augment_type == 'autoaug_sche' and epoch > (P.epochs/2):
train_loader = P.train_second_loader
train(P, epoch, model, criterion, optimizer, scheduler, train_loader, logger=logger, **kwargs)
model.eval()
if epoch % P.error_step == 0:
error = test_classifier_adv(P, model, test_loader, epoch,
adversary=adversary_t, logger=logger, ret='adv')
is_best = (best > error)
if is_best:
best = error
logger.scalar_summary('eval/best_adv_error', best, epoch)
logger.log('[Epoch %3d] [Adv_Test %5.2f] [Best %5.2f]' % (epoch, error, best))
save_states = model.state_dict()
save_checkpoint(epoch, best, save_states, optimizer.state_dict(), logger.logdir, is_best)
if epoch % P.save_step == 0:
save_checkpoint_epoch(epoch, save_states, optimizer.state_dict(), logger.logdir)