Ejemplo n.º 1
0
                                                 idxs=dict_users_test[user])
            if best_acc is None or acc_test > best_acc:
                best_acc = acc_test
                net_best = copy.deepcopy(net_local)
                # torch.save(net_local_list[user].state_dict(), model_save_path)

            print('User {}, Epoch {}, Acc {:.2f}'.format(user, iter, acc_test))

            if iter > 50 and acc_test >= 99:
                break

        net_local_list[user] = net_best

    acc_test_local, loss_test_local = test_img_local_all(
        net_local_list, args, dataset_test, dict_users_test)
    acc_test_avg, loss_test_avg = test_img_avg_all(net_glob, net_local_list,
                                                   args, dataset_test)
    acc_test_ens_avg, loss_test, acc_test_ens_maj = test_img_ensemble_all(
        net_local_list, args, dataset_test)

    print(
        'Final: acc: {:.2f}, acc (avg): {:.2f}, acc (ens,avg): {:.2f}, acc (ens,maj): {:.2f}'
        .format(acc_test_local, acc_test_avg, acc_test_ens_avg,
                acc_test_ens_maj))

    final_results = np.array(
        [[acc_test_local, acc_test_avg, acc_test_ens_avg, acc_test_ens_maj]])
    final_results = pd.DataFrame(final_results,
                                 columns=[
                                     'acc_test_local', 'acc_test_avg',
                                     'acc_test_ens_avg', 'acc_test_ens_maj'
                                 ])
Ejemplo n.º 2
0
    num_param_glob = 0
    num_param_local = 0
    for key in net_glob.state_dict().keys():
        num_param_local += net_glob.state_dict()[key].numel()
        if key in w_glob_keys:
            num_param_glob += net_glob.state_dict()[key].numel()
    percentage_param = 100 * float(num_param_glob) / num_param_local
    print('# Params: {} (local), {} (global); Percentage {:.2f} ({}/{})'.format(
        num_param_local, num_param_glob, percentage_param, num_param_glob, num_param_local))

    # generate list of local models for each user
    net_local_list = []
    for user in range(args.num_users):
        net_local_list.append(copy.deepcopy(net_glob))

    acc_test_avg, loss_test_avg = test_img_avg_all(net_glob, net_local_list, args, dataset_test)
    acc_test_local_list, _ = test_img_local_all(net_local_list, args, dataset_test, dict_users_test, return_all=True)
    acc_test_local = acc_test_local_list.mean()

    # training
    results_save_path = os.path.join(base_save_dir, 'results.csv')
    results_columns = ['epoch', 'acc_test_local', 'acc_test_avg', 'best_acc_local', 'acc_test_ens_avg', 'acc_test_ens_maj']

    loss_train = []
    best_iter = -1
    best_acc_local = -1
    best_acc_list = acc_test_local_list
    best_net_list = copy.deepcopy(net_local_list)
    fina_net_list = copy.deepcopy(net_local_list)

    results = []