'Apply TFF tutorial to CIFAR100

I want to test this tutorial with CIFAR100:

I tune the hyper parameter to fit the CIFAR100 dataset, but it seems that the accuracy is decreased every rounds instead of increasing! And the range of accuracy is very low (0.09) after more than 80 rounds! and (0.02) after 200 rounds! (fluctuated)

Here is the code:

MAX_CLIENT_DATASET_SIZE = 500
CLIENT_EPOCHS_PER_ROUND = 1
CLIENT_BATCH_SIZE = 20
TEST_BATCH_SIZE = 100

def reshape_cifar_element(element):
  return (tf.expand_dims(element['image'], axis=-1), element['coarse_label'])

def preprocess_train_dataset(dataset):
  return (dataset
          .shuffle(buffer_size=MAX_CLIENT_DATASET_SIZE)
          .repeat(CLIENT_EPOCHS_PER_ROUND)
          .batch(CLIENT_BATCH_SIZE, drop_remainder=False)
          .map(reshape_cifar_element))

cifar_train, cifar_test = tff.simulation.datasets.cifar100.load_data(cache_dir=None)

cifar_train = cifar_train.preprocess(preprocess_train_dataset)

def create_original_fedavg_cnn_model(cache_dir=None):
  data_format = 'channels_last'

  max_pool = functools.partial(
      tf.keras.layers.MaxPooling2D,
      pool_size=(2, 2),
      padding='same',
      data_format=data_format)
  conv2d = functools.partial(
      tf.keras.layers.Conv2D,
      kernel_size=5,
      padding='same',
      data_format=data_format,
      activation=tf.nn.relu)

  model = tf.keras.applications.resnet.ResNet101(include_top=False,
                                                 weights='imagenet',
                                                 input_tensor=None,
                                                 input_shape=(32,32,3),
                                                 pooling=max,
                                                 classes=20,
                                                 )
  
  return model

input_spec = cifar_train.create_tf_dataset_for_client(
    cifar_train.client_ids[0]).element_spec

def tff_model_fn():
  keras_model = create_original_fedavg_cnn_model()
  return tff.learning.from_keras_model(
      keras_model=keras_model,
      input_spec=input_spec,
      loss=tf.keras.losses.SparseCategoricalCrossentropy(),
      metrics=[tf.keras.metrics.SparseCategoricalAccuracy()])

# training the model 
federated_averaging = tff.learning.build_federated_averaging_process(
    model_fn=tff_model_fn,
    client_optimizer_fn=lambda: tf.keras.optimizers.SGD(learning_rate=0.1),
    server_optimizer_fn=lambda: tf.keras.optimizers.SGD(learning_rate=5.0))

# utility function
def format_size(size):
  size = float(size)
  for unit in ['bit','Kibit','Mibit','Gibit']:
    if size < 1024.0:
      return "{size:3.2f}{unit}".format(size=size, unit=unit)
    size /= 1024.0
  return "{size:.2f}{unit}".format(size=size, unit='TiB')

def set_sizing_environment():
  sizing_factory = tff.framework.sizing_executor_factory()
  context = tff.framework.ExecutionContext(executor_fn=sizing_factory)
  tff.framework.set_default_context(context)

  return sizing_factory

def train(federated_averaging_process, num_rounds, num_clients_per_round, summary_writer):
  environment = set_sizing_environment()

  # Initialize the Federated Averaging algorithm to get the initial server state.
  state = federated_averaging_process.initialize()

  with summary_writer.as_default():
    for round_num in range(num_rounds):
      # Sample the clients parcitipated in this round.
      sampled_clients = np.random.choice(
          cifar_train.client_ids,
          size=num_clients_per_round,
          replace=False)
      # Create a list of `tf.Dataset` instances from the data of sampled clients.
      sampled_train_data = [
          cifar_train.create_tf_dataset_for_client(client)
          for client in sampled_clients
      ]
      state, metrics = federated_averaging_process.next(state, sampled_train_data)

      size_info = environment.get_size_info()
      broadcasted_bits = size_info.broadcast_bits[-1]
      aggregated_bits = size_info.aggregate_bits[-1]

      print('round {:2d}, metrics={}, broadcasted_bits={}, aggregated_bits={}'.format(round_num, metrics, format_size(broadcasted_bits), format_size(aggregated_bits)))

      # Add metrics to Tensorboard.
      for name, value in metrics['train'].items():
          tf.summary.scalar(name, value, step=round_num)

      # Add broadcasted and aggregated data size to Tensorboard.
      tf.summary.scalar('cumulative_broadcasted_bits', broadcasted_bits, step=round_num)
      tf.summary.scalar('cumulative_aggregated_bits', aggregated_bits, step=round_num)
      summary_writer.flush()

# Clean the log directory to avoid conflicts.
try:
  tf.io.gfile.rmtree('/tmp/logs/scalars')
except tf.errors.OpError as e:
  pass  # Path doesn't exist

# Set up the log directory and writer for Tensorboard.
logdir = "/tmp/logs/scalars/original/"
summary_writer = tf.summary.create_file_writer(logdir)

train(federated_averaging_process=federated_averaging, num_rounds=100,
      num_clients_per_round=10, summary_writer=summary_writer)

Here is the output:

round  0, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.01165), ('loss', 9.618461), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=12.71Gibit, aggregated_bits=12.68Gibit
round  1, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.05465), ('loss', 7.961828), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=25.43Gibit, aggregated_bits=25.36Gibit
round  2, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0019), ('loss', 6.3175845), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=38.14Gibit, aggregated_bits=38.05Gibit
round  3, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.03435), ('loss', 6.317787), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=50.85Gibit, aggregated_bits=50.73Gibit
round  4, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0226), ('loss', 6.2073708), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=63.57Gibit, aggregated_bits=63.41Gibit
round  5, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.01405), ('loss', 6.06909), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=76.28Gibit, aggregated_bits=76.09Gibit
round  6, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0513), ('loss', 5.902921), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=88.99Gibit, aggregated_bits=88.77Gibit
round  7, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0109), ('loss', 5.7842383), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=101.71Gibit, aggregated_bits=101.45Gibit
round  8, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.04715), ('loss', 5.8524485), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=114.42Gibit, aggregated_bits=114.14Gibit
round  9, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.02165), ('loss', 5.5357785), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=127.13Gibit, aggregated_bits=126.82Gibit
round 10, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0151), ('loss', 5.2708006), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=139.84Gibit, aggregated_bits=139.50Gibit
round 11, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.18965), ('loss', 5.2840123), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=152.56Gibit, aggregated_bits=152.18Gibit
round 12, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0315), ('loss', 4.878761), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=165.27Gibit, aggregated_bits=164.86Gibit
round 13, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.1567), ('loss', 4.67198), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=177.98Gibit, aggregated_bits=177.54Gibit
round 14, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.03105), ('loss', 4.159812), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=190.70Gibit, aggregated_bits=190.23Gibit
round 15, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.00275), ('loss', 3.7448847), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=203.41Gibit, aggregated_bits=202.91Gibit
round 16, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0038), ('loss', 3.7639444), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=216.12Gibit, aggregated_bits=215.59Gibit
round 17, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0076), ('loss', 3.7399879), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=228.84Gibit, aggregated_bits=228.27Gibit
round 18, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.05845), ('loss', 3.772387), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=241.55Gibit, aggregated_bits=240.95Gibit
round 19, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0508), ('loss', 3.7920141), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=254.26Gibit, aggregated_bits=253.63Gibit
round 20, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.04465), ('loss', 3.5729136), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=266.98Gibit, aggregated_bits=266.32Gibit
round 21, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0457), ('loss', 3.6324546), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=279.69Gibit, aggregated_bits=279.00Gibit
round 22, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.12605), ('loss', 3.7194586), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=292.40Gibit, aggregated_bits=291.68Gibit
round 23, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.08765), ('loss', 3.6164575), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=305.12Gibit, aggregated_bits=304.36Gibit
round 24, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0782), ('loss', 3.5728798), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=317.83Gibit, aggregated_bits=317.04Gibit
round 25, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0228), ('loss', 3.5980206), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=330.54Gibit, aggregated_bits=329.73Gibit
round 26, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.05445), ('loss', 3.5839736), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=343.25Gibit, aggregated_bits=342.41Gibit
round 27, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.09335), ('loss', 3.7678525), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=355.97Gibit, aggregated_bits=355.09Gibit
round 28, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.01695), ('loss', 3.785364), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=368.68Gibit, aggregated_bits=367.77Gibit
round 29, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0179), ('loss', 3.891886), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=381.39Gibit, aggregated_bits=380.45Gibit
round 30, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0161), ('loss', 3.873465), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=394.11Gibit, aggregated_bits=393.13Gibit
round 31, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0665), ('loss', 3.6538444), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=406.82Gibit, aggregated_bits=405.82Gibit
round 32, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0366), ('loss', 3.7498267), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=419.53Gibit, aggregated_bits=418.50Gibit
round 33, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0038), ('loss', 3.5695012), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=432.25Gibit, aggregated_bits=431.18Gibit
round 34, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.01895), ('loss', 3.6070354), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=444.96Gibit, aggregated_bits=443.86Gibit
round 35, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.00565), ('loss', 3.7948637), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=457.67Gibit, aggregated_bits=456.54Gibit
round 36, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.01225), ('loss', 3.7862086), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=470.39Gibit, aggregated_bits=469.22Gibit
round 37, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.1948), ('loss', 3.687525), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=483.10Gibit, aggregated_bits=481.91Gibit
round 38, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0097), ('loss', 3.6151993), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=495.81Gibit, aggregated_bits=494.59Gibit
round 39, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.11255), ('loss', 3.6215568), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=508.53Gibit, aggregated_bits=507.27Gibit
round 40, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0119), ('loss', 3.7737968), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=521.24Gibit, aggregated_bits=519.95Gibit
round 41, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.01285), ('loss', 3.6574495), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=533.95Gibit, aggregated_bits=532.63Gibit
round 42, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.00095), ('loss', 3.333803), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=546.66Gibit, aggregated_bits=545.31Gibit
round 43, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0181), ('loss', 3.6864824), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=559.38Gibit, aggregated_bits=558.00Gibit
round 44, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.01515), ('loss', 3.5728378), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=572.09Gibit, aggregated_bits=570.68Gibit
round 45, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.03685), ('loss', 3.4976869), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=584.80Gibit, aggregated_bits=583.36Gibit
round 46, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0882), ('loss', 3.6385386), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=597.52Gibit, aggregated_bits=596.04Gibit
round 47, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0436), ('loss', 3.600955), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=610.23Gibit, aggregated_bits=608.72Gibit
round 48, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.06105), ('loss', 3.7713816), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=622.94Gibit, aggregated_bits=621.41Gibit
round 49, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0095), ('loss', 3.5059297), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=635.66Gibit, aggregated_bits=634.09Gibit
round 50, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.05925), ('loss', 3.4547052), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=648.37Gibit, aggregated_bits=646.77Gibit
round 51, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.1059), ('loss', 3.6679363), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=661.08Gibit, aggregated_bits=659.45Gibit
round 52, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0769), ('loss', 3.8321998), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=673.80Gibit, aggregated_bits=672.13Gibit
round 53, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.1005), ('loss', 3.588381), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=686.51Gibit, aggregated_bits=684.81Gibit
round 54, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.07015), ('loss', 3.6704624), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=699.22Gibit, aggregated_bits=697.50Gibit
round 55, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.06945), ('loss', 3.4919791), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=711.94Gibit, aggregated_bits=710.18Gibit
round 56, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.12295), ('loss', 3.6123528), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=724.65Gibit, aggregated_bits=722.86Gibit
round 57, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0408), ('loss', 3.5504036), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=737.36Gibit, aggregated_bits=735.54Gibit
round 58, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.04455), ('loss', 3.552691), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=750.07Gibit, aggregated_bits=748.22Gibit
round 59, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0207), ('loss', 3.7144353), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=762.79Gibit, aggregated_bits=760.90Gibit
round 60, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.23375), ('loss', 3.8327348), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=775.50Gibit, aggregated_bits=773.59Gibit
round 61, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0882), ('loss', 3.811276), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=788.21Gibit, aggregated_bits=786.27Gibit
round 62, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0574), ('loss', 3.8322363), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=800.93Gibit, aggregated_bits=798.95Gibit
round 63, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.2515), ('loss', 3.6164472), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=813.64Gibit, aggregated_bits=811.63Gibit
round 64, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.01505), ('loss', 3.5283866), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=826.35Gibit, aggregated_bits=824.31Gibit
round 65, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.05415), ('loss', 3.656778), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=839.07Gibit, aggregated_bits=836.99Gibit
round 66, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.03015), ('loss', 3.5999403), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=851.78Gibit, aggregated_bits=849.68Gibit
round 67, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0042), ('loss', 3.6095235), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=864.49Gibit, aggregated_bits=862.36Gibit
round 68, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.02245), ('loss', 3.6069655), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=877.21Gibit, aggregated_bits=875.04Gibit
round 69, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.0494), ('loss', 3.6805723), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=889.92Gibit, aggregated_bits=887.72Gibit
round 70, metrics=OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('mean_value', ()), ('mean_weight', ())])), ('train', OrderedDict([('sparse_categorical_accuracy', 0.02085), ('loss', 3.6121976), ('num_examples', 1000), ('num_batches', 50)]))]), broadcasted_bits=902.63Gibit, aggregated_bits=900.40Gibit

NOTE:

I'm using resent instead of CNN from the tutorial. But it seems even when I use CNN I have the same issue! Although I test this tutorial with EMNIST and I got accuracy more than 0.86 in 100 rounds! But when applying CIFAR with some changes I got very low accuracy!

Does my tuning for the parameters is the reason? How can I tuning them in this tutorial?

Appreciate your help!



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source