我是靠谱客的博主 细心发夹,最近开发中收集的这篇文章主要介绍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]
最后
以上就是细心发夹为你收集整理的DCGAN项目总结之生成器、识别器中: tcl.fully_connected、tcl.conv2d_transpose、 tcl.conv2d函数讲解的全部内容,希望文章能够帮你解决DCGAN项目总结之生成器、识别器中: tcl.fully_connected、tcl.conv2d_transpose、 tcl.conv2d函数讲解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复