[英]Missing required positional argument:
我尝试基于 LSTM 方法实现联邦学习。
def create_keras_model():
model = Sequential()
model.add(LSTM(32, input_shape=(3,1)))
model.add(Dense(1))
return model
def model_fn():
keras_model = create_keras_model()
return tff.learning.from_keras_model(
keras_model,
input_spec=(look_back, 1),
loss=tf.keras.losses.mean_squared_error(),
metrics=[tf.keras.metrics.mean_squared_error()])
但是当我想定义 iterative_process 时出现此错误。
iterative_process = tff.learning.build_federated_averaging_process(
model_fn,
client_optimizer_fn=lambda: tf.keras.optimizers.SGD(learning_rate=0.001),
server_optimizer_fn=lambda: tf.keras.optimizers.SGD(learning_rate=1.0))
TypeError: Missing required positional argument
我如何解决它?
提供的与环回参数匹配的输入要求可以由客户端训练数据要求代替。 ( TensorSpec )联合
您可以通过不同类型的输入参数并行工作。
[ 样本 ]:
import tensorflow as tf
import tensorflow_federated as tff
# Load simulation data.
source, _ = tff.simulation.datasets.emnist.load_data()
def client_data(n):
return source.create_tf_dataset_for_client(source.client_ids[n]).map(
lambda e: (tf.reshape(e['pixels'], [-1]), e['label'])
).repeat(10).batch(20)
train_data = [client_data(n) for n in range(3)]
def create_keras_model():
model = tf.keras.models.Sequential([ ])
model.add(tf.keras.layers.InputLayer(input_shape=( 784 )))
model.add(tf.keras.layers.Reshape((784, 1)))
model.add(tf.keras.layers.LSTM(32))
model.add(tf.keras.layers.Dense(1))
return model
def model_fn():
keras_model = create_keras_model()
return tff.learning.from_keras_model( keras_model,
input_spec=train_data[0].element_spec,
loss=tf.keras.losses.MeanSquaredError(reduction=tf.keras.losses.Reduction.AUTO),
metrics=[tf.keras.metrics.MeanSquaredError( ), tf.keras.metrics.Accuracy( )])
# Simulate a few rounds of training with the selected client devices.
trainer = tff.learning.build_federated_averaging_process( model_fn, client_optimizer_fn=lambda : tf.keras.optimizers.SGD(0.1),
server_optimizer_fn=lambda : tf.keras.optimizers.SGD(1.0))
state = trainer.initialize()
for _ in range(50):
state, metrics = trainer.next(state, train_data)
#print(metrics['train']['loss'])
print(metrics)
[ 输出 ]:
OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('value_sum_process', ()), ('weight_sum_process', ())])), ('train', OrderedDict([('mean_squared_error', 8.502816), ('accuracy', 0.0), ('loss', 8.5030365)]))])
OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('value_sum_process', ()), ('weight_sum_process', ())])), ('train', OrderedDict([('mean_squared_error', 8.500688), ('accuracy', 0.0), ('loss', 8.500914)]))])
OrderedDict([('broadcast', ()), ('aggregation', OrderedDict([('value_sum_process', ()), ('weight_sum_process', ())])), ('train', OrderedDict([('mean_squared_error', 8.498711), ('accuracy', 0.0), ('loss', 8.498943)]))])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.