Почему самые мелкие данные преобразуются из (28 * 28) в [-1, 784] вместо [0,784] в задаче классификации изображений? - PullRequest
0 голосов
/ 04 апреля 2020

Это фрагмент кода из https://www.tensorflow.org/federated/tutorials/federated_learning_for_image_classification

Пример - проблема классификации изображений с использованием федеративного обучения. Ниже приведена функция предварительной обработки данных emnist (размер 28 * 28). Может кто-нибудь помочь понять, почему данные были преобразованы в -1 до 784? насколько я понимаю, мы конвертируем его из двумерного в одномерный массив, потому что его легче обрабатывать. Но я не уверен, почему -1 был включен. Разве это не 0 0 784 было бы достаточно?

NUM_CLIENTS = 10
NUM_EPOCHS = 5
BATCH_SIZE = 20
SHUFFLE_BUFFER = 100
PREFETCH_BUFFER=10

def preprocess(dataset):

  def batch_format_fn(element):
    """Flatten a batch `pixels` and return the features as an `OrderedDict`."""
    return collections.OrderedDict(
        x=tf.reshape(element['pixels'], **[-1, 784]**),
        y=tf.reshape(element['label'], **[-1, 1]**))

  return dataset.repeat(NUM_EPOCHS).shuffle(SHUFFLE_BUFFER).batch(
      BATCH_SIZE).map(batch_format_fn).prefetch(PREFETCH_BUFFER)

1 Ответ

1 голос
/ 04 апреля 2020

-1 здесь указывает, что размер этого измерения должен быть выведен, и его следует рассматривать как пакетное измерение. Поскольку данные MNIST составляют 28 x 28 пикселей, если у нас будет N примеров этих данных, у нас будет N x 28 x 28 = N x 784 общее количество пикселей здесь. -1 здесь позволяет этой функции карты быть привязанной c к размеру пакета.

Если бы мы применили эту функцию карты до пакетирования, мы могли бы жестко закодировать -1 вместо 1 - но это будет антипаттерн для написания конвейеров tf.data.Dataset в целом, см. Раздел векторизованное отображение в руководстве по написанию конвейеров tf.data.Dataset.

Мы не смогли бы использовать 0 здесь, поскольку это работало бы, только если в element здесь было точно 0 примеров; как показывает вышеприведенное уравнение, это жестко закодировало бы предположение, что в element.

есть 0 пикселей.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...