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
# 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))