Создайте пользовательский объединенный набор данных в 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.
Как я могу изменить это, чтобы создать федеративный набор данных и начать обучение?
1 ответ
На очень высоком уровне, чтобы использовать произвольный набор данных с TFF, необходимы следующие шаги:
- Разделите набор данных на подмножества клиентов (как это сделать - гораздо более сложный вопрос)
- Создайте tf.data.Dataset для каждого подмножества клиента.
- Передайте список всех (или подмножество) объектов набора данных федеративной оптимизации.
Что происходит в учебнике
Учебное пособие по федеративному обучению для классификации изображений использует https://www.tensorflow.org/federated/api_docs/python/tff/learning/build_federated_averaging_process для создания федеративной оптимизации с использованием алгоритма FedAvg.
В этой записной книжке следующий код выполняет один раунд федеративной оптимизации, когда клиентские наборы данных передаются процессу ' .next
метод:
state, metrics = iterative_process.next(state, federated_train_data)
Вот federated_train_data
это питон list
из tf.data.Dataset
по одному на каждого клиента, участвующего в раунде.
Объект ClientData
Консервированные наборы данных, предоставляемые TFF (в tff.simulation.datasets), реализованы с использованием интерфейса tff.simulation.ClientData, который управляет отображением client → dataset и tff.data.Dataset
создание.
Если вы планируете повторно использовать набор данных, реализуйте его как tff.simulation.ClientData
может сделать использование в будущем проще.
Принятый ответ хорошо объяснен. Если вам нужна реализация кода для преобразования тензора в объект clientdata, вы можете найти его в этом репозитории на github.
где я использовал tff.simulation.FromTensorSlicesClientData
для преобразования набора данных mnist в данные нескольких клиентов tff.