在Conv2DTranspose中应选择哪些滤波器和核大小?

我正在尝试创建一个简单的GAN,但无法选择正确的参数。请考虑以下生成器和判别器的代码。它生成的图像尺寸为(高度 = 32,宽度 = 54)。

def build_generator(latent_size=100):    # 我们将一对(z, L)映射到图像空间(..., 54, 32, 3),其中z是一个潜在向量,L是从P_c中抽取的标签    cnn = Sequential()    cnn.add(Dense(3*54*32, input_dim=latent_size, activation='relu'))    cnn.add(Reshape((4, 3, 432)))    # 上采样到(8, 6, ...)    cnn.add(Conv2DTranspose(192, 2, strides=2, padding='valid',                        activation='relu',                        kernel_initializer='glorot_normal'))    cnn.add(BatchNormalization())    # 上采样到(16, 18, ...)    cnn.add(Conv2DTranspose(96, 5, strides=(2,3), padding='same',                        activation='relu',                        kernel_initializer='glorot_normal'))    cnn.add(BatchNormalization())    # 上采样到(32, 54, ...)    cnn.add(Conv2DTranspose(3, 5, strides=(2,3), padding='same',                        activation='tanh',                        kernel_initializer='glorot_normal'))    # 这是GAN论文中常提到的z空间    latent = Input(shape=(latent_size, ))    # 这是我们的标签    image_class = Input(shape=(1,), dtype='int32')    cls = Embedding(num_classes, latent_size,                    embeddings_initializer='glorot_normal')(image_class)    # z空间与类条件嵌入之间的哈达玛乘积    h = layers.multiply([latent, cls])    fake_image = cnn(h)    return Model([latent, image_class], fake_image)def build_discriminator():    # 构建一个相对标准的卷积网络,如参考论文中建议的使用LeakyReLUs    cnn = Sequential()    cnn.add(Conv2D(32, 3, padding='same', strides=2,                   input_shape=(32, 54, 3)))    cnn.add(LeakyReLU(0.2))    cnn.add(Dropout(0.3))    cnn.add(Conv2D(64, 3, padding='same', strides=1))    cnn.add(LeakyReLU(0.2))    cnn.add(Dropout(0.3))    cnn.add(Conv2D(128, 3, padding='same', strides=2))    cnn.add(LeakyReLU(0.2))    cnn.add(Dropout(0.3))    cnn.add(Conv2D(256, 3, padding='same', strides=1))    cnn.add(LeakyReLU(0.2))    cnn.add(Dropout(0.3))    cnn.add(Flatten())    image = Input(shape=(32, 54, 3))    features = cnn(image)    # 第一个输出(名称=generation)是判别器认为显示的图像是否为假,第二个输出    # (名称=auxiliary)是判别器认为图像所属的类别。    fake = Dense(1, activation='sigmoid', name='generation')(features)    aux = Dense(num_classes, activation='softmax', name='auxiliary')(features)    return Model(image, [fake, aux])

但我想生成尺寸为(200, 200)的图像,而不是(54, 32)。我尝试更改了几层中的一些参数,但总是得到以下错误:

ValueError: Input 0 of layer auxiliary is incompatible with the layer: expected axis -1 of input shape to have value 4000000 but received input with shape (None, 179200)

应更改哪些参数以生成尺寸为(200, 200)的图像?


回答:

一个简单的解决方案可以从这里开始:

cnn.add(Dense(25*25*432, input_dim=latent_size, activation='relu'))cnn.add(Reshape((25, 25, 432)))

然后进行三次反卷积以达到25x2x2x2 = 200

cnn.add(Conv2DTranspose(192, 2, strides=2, padding='valid',                    activation='relu',                    kernel_initializer='glorot_normal'))cnn.add(BatchNormalization())cnn.add(Conv2DTranspose(96, 2, strides=2, padding='valid',                    activation='relu',                    kernel_initializer='glorot_normal'))cnn.add(BatchNormalization())cnn.add(Conv2DTranspose(3, 2, strides=2, padding='valid',                    activation='relu',                    kernel_initializer='glorot_normal'))cnn.add(BatchNormalization())

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注