Перед передачей ввода в Convolution2d и maxpool2d вход должен иметь 4 измерения.
x_train и x_test имеют форму [BatchSize, 28, 28], но это должно быть [BatchSize, 28, 28, 1]. Поэтому мы, наконец, добавим размер канала, используя np.expand_dims()
x_train = np.expand_dims(x_train, -1)
x_test = np.expand_dims(x_test, -1)
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, (3, 3), padding="same", input_shape=(None, 28, 28, 1)),
tf.keras.layers.Activation("relu"),
tf.keras.layers.MaxPooling2D(pool_size=(2, 2)),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')
])
Да, это повлияет на ваши графики и прогнозы.
Слой свертки использует меньше весов для сравнения в плотный слой, а затем Maxpool будет принимать объекты только с максимальными значениями, чтобы делать прогнозы. Это уменьшит ваши возможности, потому что это может привести к снижению точности.
Хотя, когда у нас есть изображения большого размера, например, 500 * 500, мы должны применять слои Convolution и maxpool, чтобы уменьшить возможности, выбрав только важные особенности.
Если мы применяем функцию сглаживания и плотности на входе 500 * 500, то программе необходимо инициализировать большое количество весов, и вы можете получить ошибку Out Of Memory.