tl.add(loss.item()) ta.add(acc) optimizer.zero_grad() loss.backward() optimizer.step() tl = tl.item() ta = ta.item() print('epoch {}, loss={:.4f} acc={:.4f}' .format(epoch, tl, ta)) model.eval() vl = Averager() va = Averager() for i, batch in enumerate(val_loader, 1): data, _ = [_.cuda() for _ in batch] p = args.shot * args.test_way data_shot, data_query = data[:p], data[p:] if args.shot == 1: data_shot = torch.cat((data_shot, flip(data_shot, 3)), dim=0) proto = model(data_shot) proto = proto.reshape(shot_num, args.train_way, -1) proto = torch.transpose(proto, 0, 1)
loss = F.cross_entropy(logits, label) acc = count_acc(logits, label) print('epoch {}, train {}/{}, loss={:.4f} acc={:.4f}'.format( epoch, i, len(train_loader), loss.item(), acc)) tl.add(loss.item()) ta.add(acc) optimizer.zero_grad() #set all graditnes to zero first loss.backward() # calc gradients optimizer.step() # run gradient desc tl = tl.item() ta = ta.item() model.eval() # no grad updates with fixed model params for evaluation vl = Averager() va = Averager() for i, batch in enumerate(val_loader, 1): data, _ = [_.cuda() for _ in batch] p = args.shot * args.test_way data_shot, data_query = data[:p], data[p:] proto = model(data_shot) proto = proto.reshape(args.shot, args.train_way, -1) proto = torch.transpose(proto, 0, 1) hyperplanes, mu = projection_pro.hyperplanes( proto, args.test_way, args.shot)