Я смотрю демоверсию DCGAN Mnist, но не могу понять, как принимаются решения по измерениям.
# train data has dimension of (60000, 28, 28) which each image of size 28 * 28
BATCH_SIZE = 256
NOISE_DIMENSION = 100
...
def make_generator_model():
model = tf.keras.Sequential()
model.add(layers.Dense(7*7*256, use_bias=False, input_shape=(100,))) # <- 100 noise dimension
model.add(layers.BatchNormalization())
model.add(layers.LeakyReLU())
model.add(layers.Reshape((7, 7, 256)))
assert model.output_shape == (None, 7, 7, 256) # Note: None is the batch size
model.add(layers.Conv2DTranspose(128, (5, 5), strides=(1, 1), padding='same', use_bias=False))
assert model.output_shape == (None, 7, 7, 128)
model.add(layers.BatchNormalization())
model.add(layers.LeakyReLU())
model.add(layers.Conv2DTranspose(64, (5, 5), strides=(2, 2), padding='same', use_bias=False))
assert model.output_shape == (None, 14, 14, 64)
model.add(layers.BatchNormalization())
model.add(layers.LeakyReLU())
model.add(layers.Conv2DTranspose(1, (5, 5), strides=(2, 2), padding='same', use_bias=False, activation='tanh'))
assert model.output_shape == (None, 28, 28, 1)
return model
Почему первый Плотный слой имеет выходную форму 7,7256? Каждое изображение 28 * 28 = 7 * 7 * 4 * 4 = 7 * 7 * 16, если вход является одним изображением, было ли оно намеренно увеличено с 16 на 16x до 256? почему 16x, почему не 32x, 64x, ..et c
Conv2DTranspose, я понимаю, что когда вход должен иметь ту же форму, что и выход при использовании того же заполнение с шагом 1. Если это так, то почему размерность снизилась с (None, 7, 7, 256) до (None, 7, 7, 128) с коэффициентом 2, а также это произошло в последний раз? измерение? Если это было потому, что это было число фильтров, указанное как 128, почему оно было применено к последнему измерению и почему они выбирают 128, в частности?
Следующие несколько слоев Conv2DTranspose имеют больше смысла для меня, когда я читаю его с ног на голову, и, возможно, я должен это сделать таким образом.