我可以在 Tensorflow 联合学习 (TFF) 的 keras 模型中使用 class_weight
Can I use class_weight in keras model in Tensorflow Federated Learning (TFF)
我的数据集 class 不平衡,所以我想使用 class_weight 启用 classifier heavy weight minor class。在一般设置中,我可以分配 class 权重如下:
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()])
不直接。主要问题是 tf.keras.Model.fit
方法在概念上没有映射到从分散数据进行训练的想法。
如果你想在TFF
中完成这项工作,第一步是确定应该执行的算法是什么。据我所知,这没有明显的答案——例如,如果您不能直接访问数据,您如何确定那些 class_weights
?
但我们假设您以某种方式获得了该信息,并且只想修改客户的本地培训程序。从 examples/simple_fedavg
, the way to make it happen would be to appropriately modify how gradients are computed in this loop.
开始
我的数据集 class 不平衡,所以我想使用 class_weight 启用 classifier heavy weight minor class。在一般设置中,我可以分配 class 权重如下:
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()])
不直接。主要问题是 tf.keras.Model.fit
方法在概念上没有映射到从分散数据进行训练的想法。
如果你想在TFF
中完成这项工作,第一步是确定应该执行的算法是什么。据我所知,这没有明显的答案——例如,如果您不能直接访问数据,您如何确定那些 class_weights
?
但我们假设您以某种方式获得了该信息,并且只想修改客户的本地培训程序。从 examples/simple_fedavg
, the way to make it happen would be to appropriately modify how gradients are computed in this loop.