Posso usare class_weight nel modello keras in Tensorflow Federated Learning (TFF)

Aug 23 2020

Il mio set di dati è di classe sbilanciato, quindi desidero utilizzare class_weight che abilita la classe minore di peso elevato del classificatore. In generale, posso assegnare il peso della classe come di seguito:

weighted_history = weighted_model.fit(
    train_features,
    train_labels,
    batch_size=BATCH_SIZE,
    epochs=EPOCHS,
    callbacks=[early_stopping],
    validation_data=(val_features, val_labels),
    # The class weights go here
    class_weight=class_weight) 

C'è un modo per assegnare class_weight in tensorflow federated learning? Il mio codice per l'apprendimento federato è di seguito:

def create_keras_model(output_bias=None):
    return tf.keras.models.Sequential([
        tf.keras.layers.Dense(12, activation='relu', input_shape(5,)),
        tf.keras.layers.Dense(8, activation='relu'),
        tf.keras.layers.Dense(5, activation='relu'),
        tf.keras.layers.Dense(3, activation='relu'),
        tf.keras.layers.Dense(1, activation='sigmoid')])

def model_fn():
    keras_model = create_keras_model()
    return tff.learning.from_keras_model(
        keras_model,
        input_spec=preprocessed_example_dataset.element_spec,
        loss=tf.keras.losses.BinaryCrossentropy(),
        metrics=[tf.keras.metrics.BinaryAccuracy()])

Risposte

2 JakubKonecny Aug 24 2020 at 20:47

Non direttamente. Il problema principale è che il tf.keras.Model.fitmetodo non si mappa concettualmente sull'idea di formazione a partire da dati decentralizzati.

Se vuoi far funzionare questo TFF, il primo passo è determinare qual è l'algoritmo che dovrebbe essere eseguito. Questo non ha una risposta ovvia per quanto posso vedere - ad esempio, come si determina cosa sono class_weightsse non si ha accesso diretto ai dati?

Ma supponiamo che tu abbia queste informazioni in qualche modo disponibili e desideri semplicemente modificare la procedura di formazione locale presso i clienti. A partire da examples/simple_fedavg, il modo per realizzarlo sarebbe modificare in modo appropriato il modo in cui i gradienti vengono calcolati in questo ciclo .