В модели генератора GAN я пытаюсь сгенерировать изображение определенного c размера. Мой целевой размер 28x280x3
. Я на самом деле, до сих пор я создавал генератор на выходе 28x28x3
. Поэтому я пытаюсь с помощью UpSampling2D
увеличить размер модели. Я могу сделать вывод модели размером 28x224x3
после трех слоев UpSampling2D. Тем не менее, моя цель - 28x280x3
. Как я могу разорвать эти измерения дивергенции? Я заметил, что есть такой подход, который нацелен на изменение размеров слоев. Как это может работать в моем случае? Мой код выглядит следующим образом:
def build_generator_face(latent_dim, channels, face_sequence):
model = Sequential()
model.add(Dense(128 * 7 * 7, activation="relu", input_shape=(None, latent_dim)))
model.add(Reshape((7, 7, 128)))
model.add(UpSampling2D())
model.add(Conv2D(128, kernel_size=4, padding="same"))
model.add(BatchNormalization(momentum=0.8))
model.add(Activation("relu"))
model.add(UpSampling2D())
model.add(Conv2D(64, kernel_size=4, padding="same"))
model.add(BatchNormalization(momentum=0.8))
model.add(Activation("relu"))
if face_sequence == False:
#model.add(UpSampling2D(size=(2, 2)))
model.add(Conv2D(64, kernel_size=4, padding="same"))
model.add(BatchNormalization(momentum=0.8))
model.add(Activation("relu"))
#model.add(UpSampling2D(size=(2, 2)))
model.add(Conv2D(64, kernel_size=4, padding="same"))
model.add(BatchNormalization(momentum=0.8))
model.add(Activation("relu"))
else:
model.add(UpSampling2D(size=(1, 2)))
model.add(Conv2D(64, kernel_size=4, padding="same"))
model.add(BatchNormalization(momentum=0.8))
model.add(Activation("relu"))
model.add(UpSampling2D(size=(1, 2)))
model.add(Conv2D(64, kernel_size=4, padding="same"))
model.add(BatchNormalization(momentum=0.8))
model.add(Activation("relu"))
model.add(UpSampling2D(size=(1, 2)))
model.add(Conv2D(64, kernel_size=4, padding="same"))
model.add(BatchNormalization(momentum=0.8))
model.add(Activation("relu"))
pdb.set_trace()
model.add(Reshape((-1,3), input_shape=(28,224,3)))
model.add(Lambda(lambda x: x[:7840])) # throw away some, so that #data = 224^2
model.add(Reshape(28,280,3)) # this line gives me an error but am not sure if it is necessary or not the code is found in here: https://stackoverflow.com/questions/41903928/add-a-resizing-layer-to-a-keras-sequential-model
model.add(Conv2D(channels, kernel_size=4, padding="same"))
model.add(Activation("tanh"))
model.summary()
noise = Input(shape=(latent_dim,))
img = model(noise)
mdl = Model(noise, output = img)
return mdl
Если face_sequence равен False
, модель генерирует вывод 28x28x3
. Я хочу, чтобы когда логическая переменная True
генерировала вывод размером 28x280x3
. Как это можно сделать?