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...
Keras中关于模型的trainable状态的问题
提出问题在看GAN的实现代码的时候,发现了这么一个地方: 123456789101112131415161718192021222324252627282930313233class GAN(): def __init__(self): self.img_rows = 28 self.img_cols = 28 self.channels = 1 self.img_shape = (self.img_rows, self.img_cols, self.channels) self.latent_dim = 100 optimizer = Adam(0.0002, 0.5) # Build and compile the discriminator self.discriminator = self.build_discriminator() ...
CDCGAN
和CGAN一样,只是采用了卷积层替换全连接层的方法来搭建生成器和判别器的网络 导入所需函数12345678910import tensorflow as tffrom tensorflow import kerasfrom tensorflow.keras import layersfrom tensorflow.keras.layers import Input,multiply,Flatten,Embeddingfrom tensorflow.keras.models import Modelimport matplotlib.pyplot as pltimport numpy as npimport globimport osfrom tensorflow.keras.utils import to_categorical 准备数据1(train_images,train_labels),(_,_)=tf.keras.datasets.mnist.load_data() 1train_images.shape (60000, 28,...
CGAN
什么是CGAN所谓CGAN,就是在GAN的基础上,多施加了一些条件信息,比如图像的标签等,使得生成器可以按照我们指定的标签去生成所对应的图像。 普通GAN的目标函数为: 而CGAN的目标函数为: CGAN的网络结构如下: 如何构建CGAN本文在普通GAN(全连接层搭建)的基础上,将生成器的输入由“噪声”改为“噪声+对应该批次图像的真实标签”,将判别器的输入由”图像”改为”图像+对应该批次图像的真实标签”,最后在测试生成器的生成能力时,人为构建了0到9这10个数字作为标签(因为训练数据是mnist数据集),和随机噪声一起喂入生成器以产生新的图片。 Tensorflow2.0 实现CGAN导入所需函数12345678910import tensorflow as tffrom tensorflow import kerasfrom tensorflow.keras import layersfrom tensorflow.keras.layers import Input,multiply,Flatten,Embeddingfrom...
tf.keras.layers.Embedding
函数原型1tf.keras.layers.Embedding(input_dim, output_dim, embeddings_initializer='uniform', embeddings_regularizer=None, activity_regularizer=None, embeddings_constraint=None, mask_zero=False, input_length=None, **kwargs) 举个图像数据的例子这里的input_shape是(10),output_shape是np.prod((28, 28, 1)) 1234567from tensorflow.keras.layers import multiply,Flatten,Embeddingimg=tf.ones((2,28,28,1))#两张图片label=np.array([1,2])#两个标签label_embedding = Flatten()(Embedding(10, np.prod((28, 28,...