in train_modular.py [0:0]
def train(epoch):
model.train()
lossmeter = utils.AverageMeter()
lossauxmeter = utils.AverageMeter()
accmeter = utils.AverageMeter()
train_loss = 0.0
for idx, data in enumerate(trainloader):
data = [d.cuda() for d in data]
loss, all_losses, acc, _ = model(data)
if acc is not None:
accmeter.update(acc, data[0].shape[0])
mainloss = all_losses['main_loss']
lossmeter.update(mainloss.item(), data[0].shape[0])
if 'aux_loss' in all_losses.keys():
loss_aux = all_losses['aux_loss']
lossauxmeter.update(loss_aux.item(), data[0].shape[0])
optimizer.zero_grad()
loss.backward()
optimizer.step()
train_loss += loss.item()
if idx % args.print_every == 0:
print(
'Epoch: {} Iter: {}/{} | Loss: {:.3f}, Loss Aux: {:.3f}, Acc: {:.2f}'.
format(epoch, idx, len(trainloader), lossmeter.avg,
lossauxmeter.avg, accmeter.avg))
print(','.join([
'{}: {:.02f} '.format(k, v.item())
for k, v in all_losses.items()
]))
train_loss = train_loss / len(trainloader)
logger.add_scalar('train_loss', train_loss, epoch)
for k, v in all_losses.items():
logger.add_scalar('train_{}'.format(k), v.item(), epoch)
print('Epoch: {} | Loss: {} | Acc: {}'.format(epoch, lossmeter.avg,
accmeter.avg))
if epoch % args.save_every == 0:
state = {
'net': model.state_dict(),
'epoch': epoch,
}
torch.save(state,
args.cv_dir + '/{}/ckpt_E_{}.t7'.format(args.name, epoch))