Федеративное обучение: преобразовать мой собственный набор данных изображений в симуляцию tff Clientdata - PullRequest
2 голосов
/ 14 января 2020

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

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, например, учебник в тензорном потоке, выделенном для классификации изображений

Я пишу эту строку, и она найти эту ошибку

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

ошибка


TypeError Traceback (последний последний вызов) в 1 training_set1.element_type_structure ----> 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 (модель, пустышка)

1 Ответ

1 голос
/ 16 января 2020

Спасибо за ваш интерес к 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 и возвращает набор данных.

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

...