예제 #1
0
            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:
예제 #2
0
                    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)