TFF поддерживает динамический c размер пакета - это кодируется на уровне сигнатуры типа в атрибуте shape tff.TensorType
. Любое измерение с соответствующей формой None
будет динамическим c. Если у вас есть tff.learning.Model
, атрибут input_spec
должен иметь размер None
для любого измерения, которое будет sh динамическим c.
Точный правильная сигнатура типа спецификации зависит от того, что именно вы собираетесь делать с этими динамическими c фигурами. Вот краткий пример, который может проиллюстрировать немного больше:
Предположим, у вас есть модель Keras model
и tff.simulation.ClientData
объект client_data
. Аргумент input_spec
для tff.learning.from_keras_model
заполняет tff.learning.Model
input_spec
напрямую, поэтому именно здесь вы wi sh можете указать, что размер вашего пакета может варьироваться:
input_spec = collections.OrderedDict(
x=tf.TensorSpec(dtype=tf.float32, shape=[None, 784]),
y=tf.TensorSpec(dtype=tf.int64, shape=[None]),
)
def model_fn():
tff_model = tff.learning.from_keras_model(
keras_model=model,
input_spec=input_spec,
# other args,...
)
Затем, внутри вашего Python тренинга по вождению l oop, вы можете использовать разные размеры партий в разных раундах обучения (или даже в одном и том же раунде, я полагаю), например, (если предположить, что мы написали функцию с именем _whatever_batch_size_I_want
, который принимает число раунда в качестве аргумента и возвращает любой размер пакета, подходящий для этого раунда):
fedavg_process = tff.learning.build_federated_averaging_process(
model_fn=model_fn, # other args, ...)
state = fedavg_process.initialize()
for k in range(NUM_ROUNDS):
batch_size = _whatever_batch_size_you_want(k)
sampled_client_ids = random.choices(
client_data.client_ids, k=NUM_CLIENTS_PER_ROUND)
client_datasets = [
client_data.create_tf_dataset_for_client(x) for x in sampled_client_ids]
batched_client_datasets = [ds.batch(batch_size) for ds in client_datasets]
state = fedavg_process.next(state, batched_client_datasets)
Вы можете делать даже более изящные вещи с динамическими c формами и входными аргументами c при желании; Например, вы можете обучить модель обработки последовательности, которая принимает последовательности переменной длины, указав также размер последовательности, имеющий размер None
.