不同大小图像的TensorFlow教程DCGAN模型

不同大小图像的TensorFlow教程DCGAN模型,tensorflow,machine-learning,keras,vector,generative-adversarial-network,Tensorflow,Machine Learning,Keras,Vector,Generative Adversarial Network,和型号的TensorFlow DCGAN代码用于28x28像素黑白图像(MNIST数据集) 我想调整模型代码,使之适用于我自己的280x280 RGB图像数据集(280、280、3),但不清楚如何做到这一点。您可以在教程中使用该代码。很好,您只需要稍微调整生成器。让我为你打破它。以下是教程中的生成器代码: def make_generator_model(): model=tf.keras.Sequential() 添加(layers.Dense(7*7*256,使用_bias=False,输入

和型号的TensorFlow DCGAN代码用于28x28像素黑白图像(MNIST数据集)


我想调整模型代码,使之适用于我自己的280x280 RGB图像数据集(280、280、3),但不清楚如何做到这一点。

您可以在教程中使用该代码。很好,您只需要稍微调整生成器。让我为你打破它。以下是教程中的生成器代码:

def make_generator_model():
model=tf.keras.Sequential()
添加(layers.Dense(7*7*256,使用_bias=False,输入_shape=(100,))
model.add(layers.BatchNormalization())
model.add(layers.LeakyReLU())
model.add(层.重塑((7,7,256)))
assert model.output_shape==(无,7,7,256)#注意:无是批量大小
add(layers.conv2dtranpse(128,(5,5),跨步=(1,1),padding='same',use_bias=False))
断言model.output_shape==(无、7、7、128)
model.add(layers.BatchNormalization())
model.add(layers.LeakyReLU())
add(layers.conv2dtranpse(64,(5,5),跨步=(2,2),padding='same',use_bias=False))
断言model.output_shape==(无、14、14、64)
model.add(layers.BatchNormalization())
model.add(layers.LeakyReLU())
add(layers.conv2dtranspase(1,(5,5),跨步=(2,2),padding='same',use_bias=False,activation='tanh'))
断言model.output_shape==(无、28、28、1)
回归模型
生成器从先验分布(噪声)中采集100个样本,正如您从
输入形状中看到的那样。然后,它将数据投影到更大的维度7*7*256中,并对其进行重塑,使其具有形状(7,7,256)的特征映射。现在的想法是在模型结束时,我们希望将通道减少到1,并增加宽度和高度以达到原始图像大小。通道由过滤器的数量控制,这就是为什么它会减少每个连续的
conv2dtranpse
层。它从256变为128、64和1。对于宽度和高度,它们由
步幅
参数控制。这样一来,第一个
conv2dtransase
不会改变宽度和高度,因为它的跨步为1,但是第二个会乘以2,这会产生(14,14),最后一个
conv2dtransase
会产生(28,28)

对于您的情况,您有两个选项:增加第一个隐藏层(密集层)以将数据投影到(70*70*256),在最终的
conv2dtranpse
中,将过滤器更改为3,并保持所有内容不变,最终输出为(280、280、3)。这将如下所示:

def make_generator_model():
model=tf.keras.Sequential()
model.add(layers.Dense(70*70*256,使用_bias=False,输入_shape=(100,))
model.add(layers.BatchNormalization())
model.add(layers.LeakyReLU())
model.add(层.重塑((70,70,256)))
assert model.output_shape==(无,70,70,256)#注意:无是批量大小
add(layers.conv2dtranpse(128,(5,5),跨步=(1,1),padding='same',use_bias=False))
断言model.output_shape==(无、70、70、128)
model.add(layers.BatchNormalization())
model.add(layers.LeakyReLU())
add(layers.conv2dtranpse(64,(5,5),跨步=(2,2),padding='same',use_bias=False))
断言model.output_shape==(无、140、140、64)
model.add(layers.BatchNormalization())
model.add(layers.LeakyReLU())
add(layers.conv2dtranspase(3,(5,5),跨步=(2,2),padding='same',use_bias=False,activation='tanh'))
断言model.output_shape==(无、280、280、3)
回归模型
我不推荐这种方法,因为您只需几步就可以应用非常大的预测。第二种方法是逐渐增加
conv2dtranpse
层的数量,直到达到正确的维度。例如,从(35*35*512)开始,添加一个额外的
conv2dtranpse
,步长等于(2,2),过滤器将从512、256、128、64、3获得


关于鉴别器,它可以正常工作,无需修改。但是,我会在鉴别器中添加更多的
Conv2D
,并使其更深,因为您的图像非常大。

对于彩色图像,我们是否仍要将通道减少到1,还是3?不,应该是我在代码中所述的3个通道。我在描述中提到了它,但忘记在代码中更改它。