扁平化输入层形状

Flattened input layer shape

下面的代码取自 Coursera deeplearning.ai 课程中的 TensorFlow in Practice(计算机视觉示例 - 第 2 周)。

import tensorflow as tf
mnist = tf.keras.datasets.fashion_mnist
(training_images, training_labels), (test_images, test_labels) = mnist.load_data()

training_images  = training_images / 255.0
test_images = test_images / 255.0
model = tf.keras.models.Sequential([tf.keras.layers.Flatten(),
                                    tf.keras.layers.Dense(128, activation=tf.nn.relu),
                                    tf.keras.layers.Dense(10, activation=tf.nn.softmax)])
model.compile(optimizer=tf.optimizers.Adam(),
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
print("Executing Training:")
model.fit(training_images, training_labels, epochs=5)
print("Executing inference:")
model.evaluate(test_images, test_labels)

问题:TensorFlow如何推断输入层的形状?哪个形状在这里被压平?输入形状应该来自输入数据的形状,我在这里遗漏了什么吗?

给定 model.fit(training_images, training_labels),Tensorflow API 自动将 training_images 传递到第一层。

Training_images 是形状为 (m, 28, 28, 1) 的张量。 在哪里, m - 训练图像总数, 28x28 - 图像尺寸, 1 - 通道(灰度),

tf.keras.layers.Flatten(), 将(28, 28, 1) 28x28 图像重塑为 -> (784,).

查看此 Flatten() 方法源代码。 https://github.com/tensorflow/tensorflow/blob/v2.2.0/tensorflow/python/keras/layers/core.py#L598-L684