Example #1
0
def test_img_local(net_g, dataset_test, dict_users, args):
    net_g.eval()
    # testing
    test_loss = 0
    correct = 0

    acc_locals, local_data_sizes, loss_locals = [], [], []
    idxs_users = range(args.num_users)
    for idx in idxs_users:
        local = LocalUpdate(args=args,
                            dataset=dataset_test,
                            idxs=dict_users[idx],
                            train=False)
        (acc, local_data_size), loss = local.test(net=net_g.to(args.device))
        acc_locals.append(acc)
        local_data_sizes.append(local_data_size)
        loss_locals.append(loss)
    test_loss = sum([i * j for i, j in zip(local_data_sizes, loss_locals)
                     ]) / sum(local_data_sizes)
    correct = sum([i * j for i, j in zip(local_data_sizes, acc_locals)])
    accuracy = correct / sum(local_data_sizes)
    if args.verbose:
        print('\nTest set: Average loss: {:.4f} \nAccuracy: {}/{} ({:.2f}%)\n'.
              format(test_loss, correct, sum(local_data_sizes), accuracy))

    return acc_locals, accuracy, test_loss
Example #2
0
        # print loss
        loss_avg = sum(loss_locals) / len(loss_locals)
        print('Round {:3d}, Average loss {:.3f}'.format(iter, loss_avg))
        loss_train.append(loss_avg)

    # plot loss curve
    plt.figure()
    plt.plot(range(len(loss_train)), loss_train)
    plt.ylabel('train_loss')
    plt.savefig('./save/fed_{}_{}_{}_C{}_iid{}.png'.format(
        args.dataset, args.model, args.epochs, args.frac, args.iid))

    # testing
    list_acc, list_loss = [], []
    net_glob.eval()
    for c in range(args.num_users):
        net_local = LocalUpdate(args=args,
                                dataset=dataset_train,
                                idxs=dict_users[c],
                                tb=summary)
        acc, loss = net_local.test(net=net_glob)
        list_acc.append(acc)
        list_loss.append(loss)
    print("Average testing acc.: {:.2f}%".format(100. * sum(list_acc) /
                                                 len(list_acc)))

    torch.save(
        net_glob,
        './save/model_{}_{}_{}_C{}_iid{}.pt'.format(args.dataset, args.model,
                                                    args.epochs, args.frac,
                                                    args.iid))