为什么图像分类问题中的eminst数据从(28 * 28)转换为[-1,784]而不是[0,784]?

问题描述 投票:-1回答:1

这是https://www.tensorflow.org/federated/tutorials/federated_learning_for_image_classification的代码段

该示例是使用联合学习的图像分类问题。下面的功能是Emnist数据的预处理功能(大小为28 * 28)。谁能帮助您理解为什么将数据重塑为-1至784?据我了解,我们将其从二维数组转换为一维数组,因为它更易于处理。但是我不确定为什么要包括-1。 0 o 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)
python machine-learning mnist tensorflow-federated
1个回答
0
投票

[-1这里表示应推断此尺寸的大小,并且应将其视为批处理尺寸。由于MNIST数据为28 x 28像素,如果我们有此数据的N示例,则此处的总像素为N x 28 x 28 = N x 784-1允许此映射功能与批处理大小无关。

如果要应用此映射函数之前批处理,则可以将-1硬编码为1,但这通常是编写tf.data.Dataset管道的反模式,请参见编写性能vectorized mapping管道的指南中的tf.data.Dataset部分。

我们将无法在此处使用0,因为仅当0中确实有element个示例时,此方法才有效;如上式所示,这将对0中有element个像素的假设进行硬编码。

© www.soinside.com 2019 - 2024. All rights reserved.