DCGAN项目总结之生成器、识别器中: tcl.fully_connected、tcl.conv2d_transpose、 tcl.conv2d函数讲解

首先全连接函数(fully_connected), 卷积操作(conv2d), 反置卷积操作(conv2d_transpose)的引用方式:

 import tensorflow.contrib.layers as tcl

#########适合刚接触深度学习的人  会的话直接过就可以了, 当此为止深度学习之DCGAN就已经全部结束 下面会做的是Condtional DCGAN

测试三种函数的代码:

import tensorflow as tf
import tensorflow.contrib.layers as tcl

batch_size =128
z_dim = 100

# 可以用来测试数据经过fully_connected和conv2d_transpose之后 形状的变化
def generator(z, reuse=None):
    size = 4
    with tf.variable_scope('generator', reuse=reuse):
        print("生成器中输入数据的形状是:",z)

        #  通过修改size * size *1024 验证全连接的输出形状
        g = tcl.fully_connected(z, size * size *1024, activation_fn=tf.nn.relu, normalizer_fn=tcl.batch_norm)

        g = tf.reshape(g, (-1, size, size, 1024))
        print("******经过tcl.fully_connected之后:", g)
        # 通过修改stride的数值验证conv2d_transpose函数的特点
        g = tcl.conv2d_transpose(g, 512, 3, stride=4,
                                 activation_fn=tf.nn.relu, normalizer_fn=tcl.batch_norm, padding='SAME',
                                 weights_initializer=tf.random_normal_initializer(0, 0.02))
        print("******经过tcl.conv2d_transpose之后的形状是:", g)

        g = tcl.conv2d_transpose(g, 256, 3, stride=2,  # size*4
                                 activation_fn=tf.nn.relu, normalizer_fn=tcl.batch_norm, padding='SAME',
                                 weights_initializer=tf.random_normal_initializer(0, 0.02))
        g = tcl.conv2d_transpose(g, 128, 3, stride=2,  # size*8
                                 activation_fn=tf.nn.relu, normalizer_fn=tcl.batch_norm, padding='SAME',
                                 weights_initializer=tf.random_normal_initializer(0, 0.02))

        g = tcl.conv2d_transpose(g, 3, 3, stride=2,  # size*16
                                 activation_fn=tf.nn.sigmoid, padding='SAME',
                                 weights_initializer=tf.random_normal_initializer(0, 0.02))
        return g


noise = tf.placeholder(dtype=tf.float32, shape=[batch_size, z_dim], name='noise')
fake_image = generator(noise)




# 可以用来测试数据经过tcl.conv2d之后形状的变化

def discriminator(image, reuse=False):
    df_dim = 64
    with tf.variable_scope('discriminator', reuse=reuse):
        print("********识别器中输入数据的形状:",image)
        dis= tcl.conv2d(image, num_outputs=df_dim, kernel_size=4,
                            stride=4, activation_fn=lrelu)
        print("********识别器中经过tcl.conv2d的形状:", dis)
        dis= tcl.conv2d(dis, num_outputs=df_dim * 2, kernel_size=4,
                            stride=2, activation_fn=lrelu, normalizer_fn=tcl.batch_norm)
        dis= tcl.conv2d(dis, num_outputs=df_dim * 4, kernel_size=4,
                            stride=2, activation_fn=lrelu, normalizer_fn=tcl.batch_norm)
        dis= tcl.conv2d(dis, num_outputs=df_dim * 8, kernel_size=4,
                            stride=2, activation_fn=lrelu, normalizer_fn=tcl.batch_norm)

        dis= tcl.flatten(dis)

        d = tcl.fully_connected(dis, 1, activation_fn=None,
                                weights_initializer=tf.random_normal_initializer(0, 0.02))
        return d


real_image = tf.placeholder(dtype=tf.float32, shape=[batch_size, width, high, 3], name='X')
d_real = discriminator(real_image)

 

 

 

  tcl.fully_connected 函数:  重要的是第二个参数  第二个参数决定输出数据的shape

g = tcl.fully_connected(z, size * size *1024, activation_fn=tf.nn.relu, normalizer_fn=tcl.batch_norm)

tcl.fully_connected()函数输入参数有四个:
z(噪音数据)                    其表示噪音数据 形状是[batch_size, z_dim]
size * size *1024             其用来控制输出数据的形状[batch_size, size * size *1024]
activation_fn激活函数          DCGAN特点之一生成器之中的激活函数全部使用tf.nn.relu 特点大于0的正常输出 小于0的设置为0
normalizer_fn batch_norm      对数据进行归一化 只要记得能够加快数据收敛就可以 不改变输入数据的形状

tcl.fully_connected()函数输出的参数只有一个:

其大小是:[batch_size,size * size *1024]


##############################################
# 里面肯定是一个乘法操作
[batch_size, z_dim]  [z_dim, size * size *1024] = [batch_size, size * size *1024] 

 

 tcl.conv2d_transpose函数:重要的是第二个参数其决定输出的通道数  stride其决定输出的width和high 

注意一下 same 和valid在计算输出形状上是有区别的 但是就是一个很简单的计算 在这我就不讲他们的区别了 有兴趣的可以自己通过修改形状 进行测试一下

g = tcl.conv2d_transpose(g, 512, 3, stride=2, activation_fn= tf.nn.relu,
                     normalizer_fn=tcl.batch_norm,  padding='SAME',
                    weights_initializer=tf.random_normal_initializer(0, 0.02))



tcl.conv2d_transpose(反置卷积操作)输入的参数总共有8个参数

g   第一个参数表示输入数据的形状

512 第二个参数表示输出数据的通道数

3   第三个参数表示卷积核的大小 (注意一定要小于步长stride)

activation_fn  第四个参数   激活函数

normalizer_fn  第五个参数   是否使用归一化

padding='SAME' 第六个参数填充方式 有两种 SAME和VALID



tcl.conv2d_transpose(反置卷积操作)输出的参数只有一个

g的形状是:[batch_size,  width * stride,  high * stride,  512]
tcl.conv2d函数: 重要的是第二个参数决定输出数据通道数和第四个参数决定输出数据的width和high
shared = tcl.conv2d(image, num_outputs=df_dim, kernel_size=4,
                            stride=4, activation_fn=lrelu)


tcl.conv2d输入的参数有5个:

第一个参数:  表示输入的原始数据

第二个参数:  表示输出的通道数

第三个参数:  表示过滤器卷积核的大小

第四个参数:  表示卷积操作的步长 切记一定要小于过滤器的大小

第五个参数:   表示激活函数


tcl.conv2d输出的参数只有一个:

shared的形状是: [batch_size, 上一层的width// stride,  上一层的high// stride,  num_outputs]

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值