plot_data.append('val_acc1', val_acc1) # also evaluate training data tr_loss, tr_acc1, tr_acc5 = performance_eval(primal_model.net, train_loader4eval, loss_func, args.cuda, class_offset=class_offset) print('###Training loss:{:.4e}, top-1 accuracy:{:.5f}, top-5 accuracy:{:.5f}'.format(tr_loss, tr_acc1, tr_acc5)) plot_data.append('tr_loss', tr_loss) plot_data.append('tr_acc1', tr_acc1) print( '***Validation loss:{:.4e}, top-1 accuracy:{:.5f}, top-5 accuracy:{:.5f}, current energy:{:.4e}'.format( val_loss, val_acc1, val_acc5, cur_energy)) # save current model model_snapshot(primal_model, os.path.join(args.logdir, 'primal_model_latest.pkl')) plot_data.dump(os.path.join(args.logdir, 'plot_data.pkl')) if args.save_interval > 0 and (epoch + 1) % args.save_interval == 0: model_snapshot(primal_model, os.path.join(args.logdir, 'primal_model_epoch{}.pkl'.format(epoch))) elapse_time = time.time() - t_begin reduced_energy = energy_residue_ub - (cur_energy - args.budget) if reduced_energy <= 0: print('No energy reduced! Considering improve rho_z.') else: speed_energy = elapse_time / reduced_energy eta = speed_energy * energy_residue_ub - elapse_time print("Elapsed {:.2f}s, ets {:.2f}s".format(elapse_time, eta)) if cur_energy <= args.budget:
1] # get the index of the max log-probability correct = pred.cpu().eq(indx_target).sum() acc = correct * 1.0 / len(data) print( 'Train Epoch: {} [{}/{}] Loss: {:.6f} Acc: {:.4f} lr: {:.2e}' .format(epoch, batch_idx * len(data), len(train_loader.dataset), loss.data[0], acc, optimizer.param_groups[0]['lr'])) elapse_time = time.time() - t_begin speed_epoch = elapse_time / (epoch + 1) speed_batch = speed_epoch / len(train_loader) eta = speed_epoch * args.epochs - elapse_time print("Elapsed {:.2f}s, {:.2f} s/epoch, {:.2f} s/batch, ets {:.2f}s". format(elapse_time, speed_epoch, speed_batch, eta)) misc.model_snapshot(model, os.path.join(args.logdir, 'latest.pth')) if epoch % args.test_interval == 0: with torch.no_grad(): model.eval() test_loss = 0 correct = 0 for data, target in test_loader: indx_target = target.clone() if args.cuda: data, target = data.cuda(), target.cuda( ) #.long().squeeze() data, target = Variable(data), Variable(target) output = model(data) test_loss += F.cross_entropy(output, target).item() pred = output.data.max(1)[
sum([ weight_bits_eval[i] * num_nnz_eval[i] for i in range(n_conv_layers) ]) / full_model_size)) print('compression rate={:.4e} (train)'.format( sum([weight_bits[i] * num_nnz[i] for i in range(n_conv_layers)]) / full_model_size)) print('======================================================') # remember best prec@1 and save checkpoint if prec1 > best_acc: print('find accuracy {:4f} > {:.4f}'.format(prec1, best_acc)) new_file = os.path.join(args.logdir, 'model_best-{}.pkl'.format(epoch)) misc.model_snapshot(model_eval, new_file, old_file=old_file, verbose=True) best_acc = prec1 old_file = new_file if epoch > 0 and args.save_every > 0 and epoch % args.save_every == 0: model_snapshot( model, os.path.join(args.logdir, 'model_epoch{}.pt'.format(epoch))) # save the lastest model model_snapshot(model, os.path.join(args.logdir, 'model_latest.pt')) # print(tr_loss_hist) # print(ts_loss_hist) # print(residual_hist)