Создайте настраиваемый набор объединенных данных в TensorFlow Federated

Я хотел бы адаптировать повторяющийся автоэнкодер из этого сообщения в блоге работать в федеративной среде.

Я немного изменил модель, чтобы соответствовать примеру, приведенному в руководстве по классификации изображений TFF. / а>

def create_compiled_keras_model():
  model = tf.keras.models.Sequential([
      tf.keras.layers.LSTM(2, input_shape=(10, 2), name='Encoder'),
      tf.keras.layers.RepeatVector(10, name='Latent'),
      tf.keras.layers.LSTM(2, return_sequences=True, name='Decoder')]
  )

  model.compile(loss='mse', optimizer='adam')
  return model

model = create_compiled_keras_model()

sample_batch = gen(1)
timesteps, input_dim = 10, 2

def model_fn():
  keras_model = create_compiled_keras_model()
  return tff.learning.from_compiled_keras_model(keras_model, sample_batch)

Функция gen определяется следующим образом:

import random

def gen(batch_size):
    seq_length = 10

    batch_x = []
    batch_y = []

    for _ in range(batch_size):
        rand = random.random() * 2 * np.pi

        sig1 = np.sin(np.linspace(0.0 * np.pi + rand, 3.0 * np.pi + rand, seq_length * 2))
        sig2 = np.cos(np.linspace(0.0 * np.pi + rand, 3.0 * np.pi + rand, seq_length * 2))

        x1 = sig1[:seq_length]
        y1 = sig1[seq_length:]
        x2 = sig2[:seq_length]
        y2 = sig2[seq_length:]

        x_ = np.array([x1, x2])
        y_ = np.array([y1, y2])
        x_, y_ = x_.T, y_.T

        batch_x.append(x_)
        batch_y.append(y_)

    batch_x = np.array(batch_x)
    batch_y = np.array(batch_y)

    return batch_x, batch_x #batch_y

Пока мне не удалось найти документацию, в которой не использовались бы образцы данных из репозитория TFF.

Как я могу изменить это, чтобы создать объединенный набор данных и начать обучение?


person Adam Hodgson    schedule 30.03.2019    source источник


Ответы (2)


На очень высоком уровне, чтобы использовать произвольный набор данных с TFF, необходимы следующие шаги:

  1. Разделите набор данных на подмножества для каждого клиента (как это сделать - гораздо более серьезный вопрос)
  2. Создайте tf.data.Dataset на подмножество клиентов
  3. Передайте список всех (или подмножества) объектов набора данных в объединенную оптимизацию.

Что происходит в учебнике

В руководстве по федеративному обучению для классификации изображений используется tff.learning.build_federated_averaging_process для создания объединенной оптимизации с использованием алгоритма FedAvg.

В этой записной книжке следующий код выполняет один раунд объединенной оптимизации, где наборы данных клиента передаются методу .next процесса:

   state, metrics = iterative_process.next(state, federated_train_data)

Здесь federated_train_data - Python list из tf.data.Dataset, по одному на каждого клиента, участвующего в раунде.

Объект ClientData

Стандартные наборы данных, предоставляемые TFF (в разделе tff.simulation.datasets ) реализуются с использованием интерфейса tff.simulation.ClientData, который управляет клиентом → сопоставление набора данных и tff.data.Dataset созданием.

Если вы планируете повторно использовать набор данных, реализация его как tff.simulation.ClientData может упростить использование в будущем.

person Zachary Garrett    schedule 01.04.2019

Принятый ответ хорошо объяснен. если вам нужна реализация кода для преобразования тензора в объект clientdata, вы можете найти в этом репозиторий github.

где я использовал tff.simulation.FromTensorSlicesClientData для преобразования набора данных mnist в несколько клиентских данных tff.

person Mukul    schedule 08.05.2020