def build_gen( shape ) :
def deconv2d( x, filters, shape=(4, 4) ) :
'''
Conv2DTransposed gives me checkerboard artifact...
Select one of the 3.
'''
# Simpe Conv2DTranspose
# Not good, compared to upsample + conv2d below.
x= Conv2DTranspose( filters, shape, padding='same',
strides=(2, 2), kernel_initializer=Args.kernel_initializer )(x)
# simple and works
#x = UpSampling2D( (2, 2) )( x )
#x = Conv2D( filters, shape, padding='same' )( x )
# Bilinear2x... Not sure if it is without bug, not tested yet.
# Tend to make output blurry though
#x = bilinear2x( x, filters )
#x = Conv2D( filters, shape, padding='same' )( x )
x = BatchNormalization(momentum=Args.bn_momentum)( x )
x = LeakyReLU(alpha=Args.alpha_G)( x )
return x
# https://github.com/tdrussell/IllustrationGAN z predictor...?
# might help. Not sure.
noise = Input( shape=Args.noise_shape )
x = noise
# 1x1x256
# noise is not useful for generating images.
x= Conv2DTranspose( 512, (4, 4),
kernel_initializer=Args.kernel_initializer )(x)
x = BatchNormalization(momentum=Args.bn_momentum)( x )
x = LeakyReLU(alpha=Args.alpha_G)( x )
# 4x4
x = deconv2d( x, 256 )
# 8x8
x = deconv2d( x, 128 )
# 16x16
x = deconv2d( x, 64 )
# 32x32
# Extra layer
x = Conv2D( 64, (3, 3), padding='same',
kernel_initializer=Args.kernel_initializer )( x )
x = BatchNormalization(momentum=Args.bn_momentum)( x )
x = LeakyReLU(alpha=Args.alpha_G)( x )
# 32x32
x= Conv2DTranspose( 3, (4, 4), padding='same', activation='tanh',
strides=(2, 2), kernel_initializer=Args.kernel_initializer )(x)
# 64x64
return models.Model( inputs=noise, outputs=x )
评论列表
文章目录