Posso usare class_weight nel modello keras in Tensorflow Federated Learning (TFF)
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
Non direttamente. Il problema principale è che il tf.keras.Model.fit
metodo 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_weights
se 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 .