Как сделать прогноз с помощью TFF?

У меня вопрос: как я могу предсказать метку такого изображения с помощью Tensorflow Federated?

После завершения оценки модели я хотел бы предсказать метку данного изображения. Как и в Керасе, мы делаем это:

# new instance where we do not know the answer
Xnew = array([[0.89337759, 0.65864154]])
# make a prediction
ynew = model.predict_classes(Xnew)
# show the inputs and predicted outputs
print("X=%s, Predicted=%s" % (Xnew[0], ynew[0]))

Выход:

X=[0.89337759 0.65864154], Predicted=[0]

вот как были созданы state и model_fn:


def model_fn():
    keras_model = create_compiled_keras_model()
    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)
state = iterative_process.initialize()

Я нахожу эту ошибку:

list(self._name_to_index.keys())[:10]))
AttributeError: The tuple of length 2 does not have named field "assign_weights_to". Fields (up to first 10): ['trainable', 'non_trainable']

Спасибо


person seni    schedule 05.01.2021    source источник
comment
Ответ будет зависеть от того, как state был создан (использовался tff.learning? Если да, как был определен аргумент model_fn?) Можно ли расширить вопрос этими деталями?   -  person Zachary Garrett    schedule 06.01.2021


Ответы (1)


(Требуется TFF 0.16.0 или новее)

Поскольку код создает tff.learning.Model из tf.keras.Model, вы можете использовать _ 4_ в tff.learning.ModelWeights объект (тип state.model). Этот метод используется в руководстве Федеративное обучение для создания текста.

Это может выглядеть примерно так (внизу, ранние части являются примером цикла обучения FL):


def create_keras_model() -> tf.keras.Model:
  ...

def model_fn():
  ...
  return tff.learning.from_keras_model(create_keras_model())

training_process = tff.learning. build_federated_averaging_process(model_fn, ...)

state = training_process.initialize()
for _ in range(NUM_ROUNDS):
  state, metrics = training_process.next(state, ...)

model_for_inference = create_keras_model()
state.model.assign_weights_to(model_for_inference)

После того, как веса из state были присвоены обратно в модель Keras, код может использовать стандартные API Keras, такие как _ 9_

predictions = model_for_inference.predict_on_batch(batch)
person Zachary Garrett    schedule 06.01.2021
comment
Спасибо за ваше время, когда я выполняю ваше решение после 10 раундов, я обнаруживаю эту ошибку AttributeError: The tuple of length 2 does not have named field "assign_weights_to". Fields (up to first 10): ['trainable', 'non_trainable'] - person seni; 09.01.2021
comment
Какая версия TFF используется? Это сообщение об ошибке может означать, что assign_weights_to вызывается внутри функции, помеченной знаком tff.federated_computation, что не сработает. Его необходимо использовать с state, возвращаемым initialize или next. См. def keras_evaluate(state, round_num) в учебнике, где также упоминается ответ, где он вызывает keras_model.evaluate, его можно заменить на keras_model.predict_on_batch. - person Zachary Garrett; 10.01.2021
comment
Не могли бы вы включить версию TFF и трассировку стека в сообщение об ошибке? это поможет дать более точные ответы. - person Zachary Garrett; 11.01.2021
comment
TFF 0.12.0 Traceback (most recent call last): File "d.py", line 171, in <module> state.model.assign_weights_to(model_for_inference) File "/home/hp/anaconda3/lib/python3.6/site-packages/tensorflow_federated/python/common_libs/anonymous_tuple.py", line 138, in __getattr__ list(self._name_to_index.keys())[:10])) AttributeError: The tuple of length 2 does not have named field "assign_weights_to". Fields (up to first 10): ['trainable', 'non_trainable'] - person seni; 11.01.2021
comment
Спасибо, @Zachary, ты можешь мне сказать, что может быть партией? если у меня есть test_data = [client_datav(n) for n in range(4)] . - person seni; 12.01.2021
comment
Для ответа выше может потребоваться более новая версия TFF, вероятно, что-то после 0.16.0. В вопросе метод построения sample_batch будет работать для создания пакетов. Это должна быть вложенная структура в формате, ожидаемом моделью. - person Zachary Garrett; 13.01.2021