计算机视觉任务
...
ResNet
Why ResNet ? 当神经网络层数变深时,模型性能可能会不增反降。 举个例子,对于某数据集,考虑以下情况: 在测试集上,100层的网络性能低于20层的网络 在训练集上,100层的网络性能低于20层的网络 单单看前者,猜想出现过拟合的可能性较大。因为100层的网络能够拟合更加复杂的函数,对训练集的拟合效果也会更好,但可能导致在测试集上表现并不好(100层网络可能仅仅是记住了训练集的每一个样本的特征及其训练标签,而在面对新的没有见过的样本(比如测试样本)时,就无能为力了)。 然而,再看后者,在训练集上都不达标了,这显然不是过拟合,并且网络越深性能越差,一定是某些其他地方出了问题! 没错,在100层网络的训练过程中,网络的正、反向信息流动不顺畅,从而导致网络没有充分被训练,这正是上面的例子中现象产生的原因! **残差网络(ResNet)**的提出解决了这一问题,它通过从当前层(不妨记作Current Layer)直接向经过某个网络块(不妨记作F_Block)后得到的后面的层(不妨记作Layer)之间加一条线,使得Current...
CycleGAN
导入相关包123456789101112import tensorflow as tfimport tensorflow_addons as tfafrom tensorflow.keras.layers import Dropout, Concatenate,BatchNormalization,LeakyReLU,UpSampling2D, Conv2Dfrom tensorflow.keras.optimizers import Adamimport matplotlib.pyplot as pltimport sysimport osfrom skimage.transform import resizeimport imageiofrom glob import globimport numpy as...
SRGAN
通过采样等方式获取高清图片的低分辨率版本,两者形成一一映射的关系,作为准备好的数据集。 不同于之前的GAN的输入为noise,SRGAN 的输入为低分辨率图片,希望通过对抗的方式学习如何生成低分辨率图片的超清版本。 主要改动的地方除了生成器和判别器的架构外,就是损失函数了:判别器的损失函数无需改动,而生成器的损失函数在原来的基础上,需要再增加两项,一个是真实图片与生成图片的均方误差,另一个是真实图片与生成图片经过vgg19提取得到的特征之间的均方误差(论文中把这两个合起来叫做内容损失,而之前生成器的损失叫做对抗损失,内容损失+对抗损失=感知损失)。 代码导入相关函数1234567import tensorflow as tfimport matplotlib.pyplot as pltimport numpy as npfrom tensorflow.keras import layersimport scipy#需要执行 pip install scipy==1.2.1 来给scipy降级from glob import globimport...
infoGAN
导入相关函数12345import tensorflow as tfimport matplotlib.pyplot as pltimport numpy as npfrom tensorflow.keras import layersfrom tensorflow.keras.utils import to_categorical 准备数据1(train_images,train_labels),(_,_)=tf.keras.datasets.mnist.load_data() 1train_images.shape (60000, 28, 28) 1train_images.dtype dtype('uint8') 1train_images=train_images.reshape(train_images.shape[0],28,28,1).astype('float32') 1train_images.shape (60000, 28, 28,...
ACGAN
网络结构ACGAN 可以看作是CGAN和SGAN的融合: 模仿CGAN,将类别标签class也输入生成器 模仿SGAN,判别器不仅仅输出真假,还充当分类器 搭建模型由于ACGAN可以看作是CGAN和SGAN的融合,因此在代码实现上也是综合了两者的代码,主要修改部分为损失函数和两个网络结构,具体见代码注释 ACGAN的损失部分如下: 判别损失: 分类损失: 判别器的损失为$L_C+L_S$,意思是让判别器既能判别图片的真伪,又有不错的分类能力; 生成器的损失为$L_C-L_S$,意思是让判别器不能判别图片的真伪,但还有不错的分类能力。 导入相关函数12345import tensorflow as tfimport matplotlib.pyplot as pltimport numpy as npfrom tensorflow.keras import layersfrom tensorflow.keras.utils import...
对前面三篇文章的总结
序章起初,我觉得使用Keras的那些API,比如train_on_batch,compile等等,极大的减少了代码量,对刚刚入门的小白来说比较友好。 在开始接触GAN之后,发现一些关于GAN的书籍,比如GANs in...
DCGAN_V2.0
导入相关函数1234import tensorflow as tfimport matplotlib.pyplot as pltimport numpy as npfrom tensorflow.keras import...
【警告原因不明,怀疑是梯度消失】warning:tensorflow:Grandients_do_not_exist
更新!!! 好像并不是Dropout的原因,在训练SGAN时也出现了同样的警告,即使已经设置了Dropout层的traing=True,怀疑是梯度消失(有文章说是这个 https://www.jiqizhixin.com/articles/2018-11-27-24 )或爆炸 在本文中,可能设置training=Trur恰好避免了梯度消失或爆炸,只是凑巧而已(猜测) 具体原因后续再来分析,先这样了。 问题提出基于DCGAN(https://fx0809.gitee.io/2020/10/07/DCGAN/)的代码,想要将生成器和判别器的实现方式改为继承自`tf.keras.Model`类的方式,修改部分的代码如下: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869class Generator_model(tf.keras.Model): def...
【训练结果很糟糕】SGAN
2020年10月16号更新: 应该是由于判别器本身的网络结构导致的(应证了猜想1)。 在训练ACGAN时,梯度也出现了问题(warning),我将判别器由卷积层换成了全连接层,再次运行就能正常训练了,详见这篇文章: 什么是SGAN在原始GAN架构的基础上,将判别器的二分类(真实样本or生成样本)改为多分类(共N+1,N classes+fake),便得到了SGAN( Semi-Supervised GAN) 。 此时,分类器(同时也是判别器)的表现更好,并且生成器生成的图片的质量也更高。 如何实现SGAN生成器模型无需改动,需要改动的是判别模型以及后续的训练过程 导入相关函数12345import tensorflow as tfimport matplotlib.pyplot as pltimport numpy as npfrom tensorflow.keras import layersfrom tensorflow.keras.utils import...













