1

我已经用 VGG16 模型构建了我的代码 TFF。然而,在训练时,我的准确率没有改变,即使在 11 轮之后也保持在 0.5 左右。我试过改变学习率,但没有显着效果。!!!那么,我可以在代码中更改哪些指标和内容以提高准确性,因为当我运行我的代码时,准确性是稳定的并且不会增加!

这是我的 VGG16 的代码

def create_compiled_keras_model():

    IMG_SHAPE = (IMG_SIZE, IMG_SIZE, 3)
    VGG16_MODEL = tf.keras.applications.VGG16(input_shape=IMG_SHAPE,
                                               include_top=False,
                                               weights='imagenet')

#VGG16_MODEL.trainable=False
    global_average_layer = tf.keras.layers.GlobalAveragePooling2D()
    prediction_layer = tf.keras.layers.Dense(......)


    model = tf.keras.Sequential([ VGG16_MODEL, global_average_layer, prediction_layer ])


    model.compile  .............
    return model

...
iterative_process = tff.learning.build_federated_averaging_process(model_fn)
state = iterative_process.initialize()
for round_num in range(2, 12):
  state, metrics = iterative_process.next(state, federated_train_data)
  print('round {:2d}, metrics={}'.format(round_num, metrics, state))
4

1 回答 1

0

我在这里要调查的第一件事是:这个模型是否以集中方式训练?

这可以通过尝试以下方法来回答:

model = create_compiled_keras_model()
# Assumes client_data_object is tff.simulation.ClientData object
centralized_dataset = client_data_object.create_tf_dataset_from_all_clients()
model.fit(centralized_dataset, verbose=1)

如果这些数字不下降,则以联合方式训练模型不太可能导致收敛。

您提到初始化可能是这里的一个问题;如果这是问题所在,它应该出现在这里,因为TFF 实际上从 model_fn 本身编码的初始化中提取了初始化

您还提到了批量规范;有趣的是,我个人还没有看到在联邦环境中很好地使用批处理规范。我们已经看到组规范在一些视觉任务中起作用,但是根据 Keras 公开的 API,将组规范连接到 VGG 架构中可能不会立即生效。

如果这些数字确实下降了,那么我将在联合设置中调查的第一件事是将学习率设置为比在集中设置中表现良好的学习率高得多(例如 2-3 个数量级)。

于 2020-03-05T17:36:42.053 回答