1 引言
前面导入数据部分,看到迭代器就开始有点看不懂了,有时间的话出一个迭代器的专题,下面就要进入正题了generator部分,但是从作者的第一行Global generator: Encode -> quantize -> reconstruct,就开始懵逼了,为啥生成器做的是encoder的工作,我在之前看李宏毅老师的视频的时候明明generator是做decoder的工作的呀,但是不管啦,继续往下看,相信看到后面会明白的啦
2 encoder部分
@staticmethod
def encoder(x, config, training, C, reuse=False, actv=tf.nn.relu, scope='image'):
"""
Process image x ([512,1024]) into a feature map of size W/16 x H/16 x C
+ C: Bottleneck depth, controls bpp
+ Output: Projection onto C channels, C = {2,4,8,16}
"""
init = tf.contrib.layers.xavier_initializer()
print('<------------ Building global {} generator architecture ------------>'.format(scope))
def conv_block(x, filters, kernel_size=[3,3], strides=2, padding='same', actv=actv, init=init):
bn_kwargs = {
'center':True, 'scale':True, 'training':training, 'fused':True, 'renorm':False}
in_kwargs = {
'center':True, 'scale': True}
x = tf.layers.conv2d(x, filters, kernel_size, strides=strides, padding=padding, activation=None)
# x = tf.layers.batch_normalization(x, **bn_kwargs)
x = tf.contrib.layers.instance_norm(x, **in_kwargs)
x = actv(x)
return x
with tf.variable_scope('encoder_{}'.format(scope), reuse=reuse):
# Run convolutions
f = [60, 120, 240, 480, 960]
x = tf.pad(x, [[0, 0], [