Федеративное обучение: преобразование моего собственного набора данных изображений в клиентские данные моделирования tff

вот код моего теста федеративного обучения

from __future__ import absolute_import, division, print_function
import os
import collections
import warnings
from six.moves import range
import numpy as np
import six
import tensorflow as tf
import tensorflow_federated as tff
from tensorflow.keras.callbacks import EarlyStopping, ReduceLROnPlateau, ModelCheckpoint
import PIL


#pretrain

train_datagen1 = tf.keras.preprocessing.image.ImageDataGenerator(vertical_flip=True)
training_set1= train_datagen1.flow_from_directory('folder1/train',target_size=(200, 200), batch_size=32)



)




Теперь, когда я хочу создать sample_batch, как учебник в tenorflow federtaed для классификации изображений

Я пишу эту строчку и нахожу эту ошибку

example_dataset = training_set1.create_tf_dataset_for_client(training_set1.client_ids[0])

Ошибка


TypeError Traceback (последний вызов последним) в 1 обучающем_наборе1. Элемент_тип_структуры ----> 2 example_dataset = training_set1.create_tf_dataset_for_client (training_set1.client_ids [0])

TypeError: объект 'abstractproperty' не поддерживает индексацию


Можете ли вы сказать мне, как я должен создать dummy_batch, чтобы преобразовать модель keras в tff.learning.from_compiled_keras_model (model, dummy_batch)


person Eliza    schedule 14.01.2020    source источник


Ответы (1)


Спасибо за интерес к TFF!

Как правило, TFF предназначен для приема объектов tf.data.Dataset, поэтому приведенный выше пример требует небольшой дополнительной предварительной обработки.

Хорошая новость в том, что существует существующее руководство, в котором показан пример этого. В приведенном выше примере должно работать примерно следующее:

ds = tf.data.Dataset.from_generator(
    img_gen.flow_from_directory, args=[<your_directory>], 
    output_types=<your_types>, 
    output_shapes=<your_shapes>
)

Как правило, объект ClientData можно рассматривать как причудливый dict, отображающий идентификаторы клиентов на tf.data.Datasets. ClientData сам по себе является абстрактным классом и поэтому не может быть создан напрямую, а методы класса предоставляются для создания реальных экземпляров ClientData. Одним из таких методов класса, который должен работать здесь, будет tff.simulation.ClientData.from_clients_and_fn. Здесь, если вы передадите список client_ids и функцию, которая возвращает соответствующий набор данных при заданном идентификаторе клиента, вы получите полностью функциональный ClientData.

Я думаю, здесь подход к определению функции, которую вы можете использовать, заключается в создании Python dict, который сопоставляет идентификаторы клиентов с объектами tf.data.Dataset - затем вы можете определить функцию, которая принимает идентификатор клиента, просматривает набор данных в dict и возвращает набор данных.

Надеюсь, это поможет!

person Keith Rush    schedule 16.01.2020
comment
Это должен быть пакет данных с формой и типом, которые модель Keras ожидает , если она была обучена локально, поэтому, если я правильно интерпретирую ваш вопрос, это не должно не быть вложенные. В частности, фиктивный пакет используется для вызова метода train_on_batch из базовой модели Keras (поскольку Keras лениво создает экземпляры некоторых атрибутов). - person Keith Rush; 19.01.2020