Keras & Tensorflow - Аргумент слоя как переменная, которая будет изменена во время прогнозирования - PullRequest
0 голосов
/ 28 августа 2018

Я использую этот код для обучения модели DCGAN для генерации изображений. DCGAN

Я хочу иметь возможность выводить (прогнозировать) изображения с более высоким разрешением, чем при обучении модели, и мне говорят, что это возможно при использовании свертки. В следующем коде, который описывает модель генератора, если я изменю шаг на слоях Conv2DTranspose, я могу увеличить выходную форму (следовательно, разрешение изображения). Как я могу установить значение шага во время тренировки, отличное от прогноза? Или есть другой способ сделать то, что я хочу?

# Creates the generator model. This model has an input of random noise and
# generates an image that will try mislead the discriminator.

def construct_generator():
generator = Sequential()

generator.add(Dense(units=4 * 4 * 512,
                    kernel_initializer='glorot_uniform',
                    input_shape=(1, 1, 100)))
generator.add(Reshape(target_shape=(4, 4, 512)))
generator.add(BatchNormalization(momentum=0.5))
generator.add(Activation('relu'))

generator.add(Conv2DTranspose(filters=256, kernel_size=(5, 5),
                              strides=(2, 2), padding='same',
                              data_format='channels_last',
                              kernel_initializer='glorot_uniform'))
generator.add(BatchNormalization(momentum=0.5))
generator.add(Activation('relu'))

generator.add(Conv2DTranspose(filters=128, kernel_size=(5, 5),
                              strides=(2, 2), padding='same',
                              data_format='channels_last',
                              kernel_initializer='glorot_uniform'))
generator.add(BatchNormalization(momentum=0.5))
generator.add(Activation('relu'))

generator.add(Conv2DTranspose(filters=64, kernel_size=(5, 5),
                              strides=(2, 2), padding='same',
                              data_format='channels_last',
                              kernel_initializer='glorot_uniform'))
generator.add(BatchNormalization(momentum=0.5))
generator.add(Activation('relu'))

generator.add(Conv2DTranspose(filters=3, kernel_size=(5, 5),
                              strides=(2, 2), padding='same',
                              data_format='channels_last',
                              kernel_initializer='glorot_uniform'))
generator.add(Activation('tanh'))

optimizer = Adam(lr=0.00015, beta_1=0.5)
generator.compile(loss='binary_crossentropy',
                  optimizer=optimizer,
                  metrics=None)

return generator
...