欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

GAN的反卷积

程序员文章站 2022-07-06 11:19:59
...

GAN里面生成器的常用的反卷积的函数已经在tensorflow里面为大家写好,在layers,nn两个包里面都有三种维度的反卷积函数。

GAN的反卷积
1首先说一下反卷积就是一个上采样的过程
GAN的反卷积

GAN的反卷积

2:layers里面常用的函数是tf.layers.conv2d_transpose,官网上所给标准的反卷积函数的定义。

conv2d_transpose(

inputs,
filters,
kernel_size,
strides=(1, 1),
padding='valid',
data_format='channels_last',
activation=None,
use_bias=True,
kernel_initializer=None,
bias_initializer=tf.zeros_initializer(),
kernel_regularizer=None,
bias_regularizer=None,
activity_regularizer=None,
kernel_constraint=None,
bias_constraint=None,
trainable=True,
name=None,
reuse=None )

接下来看一下里面各个参数的具体意思,及可能需要传的参数
1 inputs:输入值是一个张量,在GAN里面一般可以是一个一维向量的噪声,一般通过全连接之后reshape成你所需要的多维数组,例如100维的噪声全连接为1024*4*4大小一维数组,然后reshape成1024*4*4的单位数组。也可以是多位的数组。
2 filters:控制你下一层你生成的数组的维度,例如上面的1024.
3 kernel_size:代表卷积核的大小。是两个整数的元组或列表(见Python里面定义这两个),也可以是一个数
4 strides:卷积的步长。可以是一个元组或列表,或者一个数
5 padding:代表是否填充。有两个选项”valid” or “same”
6 data_format:是输入维度的顺序。一个是:channels_last(默认),(batch, height, width, channels);另一个是:channels_first,(batch, channels, height, width)
7 reuse:特别注意!!!重用前一层名字相同的权重。可能在反向传播的时候出问题。

`
def generator(x, isTrain=True, reuse=False):

with tf.variable_scope(‘generator’, reuse=reuse):

    # 1st hidden layer
    conv1 = tf.layers.conv2d_transpose(x, 1024, [4, 4], strides=(1, 1), padding='valid')
    lrelu1 = tf.nn.relu(tf.layers.batch_normalization(conv1, training=isTrain), 0.2)

    # 2nd hidden layer
    conv2 = tf.layers.conv2d_transpose(lrelu1, 512, [4, 4], strides=(2, 2), padding='same')
    lrelu2 = tf.nn.relu(tf.layers.batch_normalization(conv2, training=isTrain), 0.2)

    # 3rd hidden layer
    conv3 = tf.layers.conv2d_transpose(lrelu2, 256, [4, 4], strides=(2, 2), padding='same')
    lrelu3 = tf.nn.relu(tf.layers.batch_normalization(conv3, training=isTrain), 0.2)

    # 4th hidden layer
    conv4 = tf.layers.conv2d_transpose(lrelu3, 128, [4, 4], strides=(2, 2), padding='same')
    lrelu4 = tf.nn.relu(tf.layers.batch_normalization(conv4, training=isTrain), 0.2)

    # output layer
    conv5 = tf.layers.conv2d_transpose(lrelu4, 1, [4, 4], strides=(2, 2), padding='same')
    o = tf.nn.tanh(conv5)

    return o`

3.nn里面也有tf.nn.conv2d_transpose,官网的定义:
conv2d_transpose(

value,
filter,
output_shape,
strides,
padding='SAME',
data_format='NHWC',
name=None

和layers里面定义的有很多相似之处。
1.value:定义的和上面的data_format很相似,是一个四维的张量。一种是适配于NHWC数据格式的[batch, height, width, in_channels] 另一种是适配于NCHW的[batch, in_channels, height, width]
2.filter,strides,padding同上
3.output_shape:是一维的张量,代表输出的格式
4.data_format:和1中联系有两个值分别是NHWC,NCHW。

例子:
x1 = tf.ones(shape=[64,7,7,256]
w=tf.ones([3,3,128,256])
y = tf.nn.conv2d_transpose(x1, w, output_shape=[64,14,14,128], strides=[1,2,2,1], padding=’SAME’)

相关标签: 反卷积