NameError: имя FileCheckpointManager не определено при сохранении модели - PullRequest
2 голосов
/ 05 мая 2020

после моделирования этого кода федеративного обучения для классификации изображений я хотел бы сохранить свою модель, поэтому я добавляю эти две строки

ckpt_manager = FileCheckpointManager("model.h5")
ckpt_manager.save_checkpoint(ServerState.from_anon_tuple(state), round_num=2) 

Итак, вот весь мой код:

import collections
import time

import tensorflow as tf
tf.compat.v1.enable_v2_behavior()

import tensorflow_federated as tff

source, _ = tff.simulation.datasets.emnist.load_data()


def map_fn(example):
  return collections.OrderedDict(
      x=tf.reshape(example['pixels'], [-1, 784]), y=example['label'])
def client_data(n):
  ds = source.create_tf_dataset_for_client(source.client_ids[n])
  return ds.repeat(10).shuffle(500).batch(20).map(map_fn)


train_data = [client_data(n) for n in range(10)]
element_spec = train_data[0].element_spec

def model_fn():
  model = tf.keras.models.Sequential([
      tf.keras.layers.Input(shape=(784,)),
      tf.keras.layers.Dense(units=10, kernel_initializer='zeros'),
      tf.keras.layers.Softmax(),
  ])
  return tff.learning.from_keras_model(
      model,
      input_spec=element_spec,
      loss=tf.keras.losses.SparseCategoricalCrossentropy(),
      metrics=[tf.keras.metrics.SparseCategoricalAccuracy()])


trainer = tff.learning.build_federated_averaging_process(
    model_fn, client_optimizer_fn=lambda: tf.keras.optimizers.SGD(0.02))

....
NUM_ROUNDS = 11
for round_num in range(2, NUM_ROUNDS):
  state, metrics = trainer.next(state, federated_train_data)
  print('round {:2d}, metrics={}'.format(round_num, metrics))


ckpt_manager = FileCheckpointManager("model.h5")
ckpt_manager.save_checkpoint(ServerState.from_anon_tuple(state), round_num=9)

Но эта ошибка появляется:

NameError: name 'FileCheckpointManager' is not defined

Буду признателен, если вы расскажете мне, как я решаю эту проблему

1 Ответ

1 голос
/ 05 мая 2020

Похоже, в коде отсутствует импорт для модуля с диспетчером контрольных точек.

FileCheckpointManger определено в модуле checkpoint_manager здесь: tensorflow_federated/python/research/utils/checkpoint_manager.py.

Попробуйте добавить импорт вверху файла следующим образом (в следующем примере предполагается, что федеративное репозиторий github тензорного потока находится в пути поиска импорта):

from tensorflow_federated.python.research.utils import checkpoint_manager
# ...
ckpt_manager = checkpoint_manager.FileCheckpointManager("model.h5")
...