Tensorflow Federated Learning(TFF)のkerasモデルでclass_weightを使用できますか?
Aug 23 2020
私のデータセットはクラスが不均衡であるため、class_weightを使用して、分類子がマイナークラスに重みを付けることができるようにします。一般的な設定では、次のようにクラスの重みを割り当てることができます。
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)
TensorFlowフェデレーション学習でclass_weightを割り当てる方法はありますか?連合学習の私のコードは以下のとおりです。
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()])
回答
2 JakubKonecny Aug 24 2020 at 20:47
直接ではありません。主な問題は、このtf.keras.Model.fit
方法が分散データからのトレーニングのアイデアに概念的にマッピングされていないことです。
これをで機能させたい場合TFF
、最初のステップは、実行する必要のあるアルゴリズムを決定することです。私が見る限り、これには明確な答えはありません。たとえば、class_weights
データに直接アクセスできない場合、どのようにしてそれらを判断しますか?
しかし、その情報が何らかの形で利用可能であり、単にクライアントでのローカルトレーニング手順を変更したいとします。から始めてexamples/simple_fedavg、それを実現する方法は、このループで勾配が計算される方法を適切に変更することです。