Я хотел бы реализовать код классификации изображений с помощью tenorflow-federated, поэтому, когда я создаю модель и передаю ее процессу федеративного усреднения, я обнаруживаю ошибку, которую не могу понять здесь. Вот часть моего кода, реализованного с помощью TFF
input_shape = (224,224,3)
def create_compiled_keras_model(input_shape, base_model='resnet18'):
inputs = tf.keras.layers.Input(shape=(input_shape))
base_encoder = tf.keras.applications.ResNet50(
include_top=False, weights=None, input_tensor=None,
input_shape=None, pooling='avg')
base_encoder.training = True
h = base_encoder(inputs)
x = tf.keras.layers.Dense(2)(h)
x = tf.keras.layers.Activation('relu')(x)
x = tf.keras.layers.Dense(2)(x)
model = tf.keras.Model(inputs=inputs, outputs=[h, x])
model.compile(
optimizer=tf.keras.optimizers.SGD(learning_rate=0.001),
loss=tf.keras.losses.CategoricalCrossentropy(),
metrics=[tf.keras.metrics.CategoricalAccuracy()])
return model
def model_fn():
keras_model = create_compiled_keras_model(input_shape, base_model='resnet18')
return tff.learning.from_compiled_keras_model(keras_model, sample_batch)
iterative_process = tff.learning.build_federated_averaging_process(model_fn, server_optimizer_fn=lambda: tf.keras.optimizers.SGD(learning_rate=1.0),client_weight_fn=None)
Ошибка была:
ValueError: Error when checking model target: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 2 array(s), for inputs ['resnet50', 'dense_1'] but instead got the following list of 1 arrays: [<tf.Tensor 'Const_1:0' shape=(2, 2) dtype=float32>]...
Спасибо за помощь !!