
《PyTorch生成对抗网络编程》读书笔记
文章平均质量分 91
sunshinecxm_BJTU
这个作者很懒,什么都没留下…
展开
-
附录C 卷积案例
附录C 卷积案例卷积常用于图像神经网络中,既可以作为分类器,也可以作为生成器。在设计卷积神经网络时,我们需要清楚每个卷积层输出数据的形状。在本附录中,我们将通过常用的卷积层配置,了解如何得出这些数据的形状。特别需要注意的是,转置卷积普遍被认为是较难掌握的。这里,我们将通过一些例子来证明它们并不难理解。这些例子都遵循了一个非常简单的窍门。C.1 例1: 卷积,步长为1,无补全在第1个例子中,输入图像大小为6×6,我们使用一个2×2的卷积核,步长为1上图显示了卷积核是如何沿着图像以步长1移动的。卷积原创 2022-05-03 22:21:32 · 2614 阅读 · 0 评论 -
附录B GAN学习可能性
附录B GAN学习可能性GAN到底能学到什么?这是一个很好的问题,但并没有一个显而易见的答案。接下来,我们将以不使用过多数学术语的方式,对GAN所学习的内容进行直观的解释。让我们先从GAN不能学习什么开始吧。B.1 GAN不会记忆训练数据GAN不会学习记忆训练数据中的实例,包括任何实例中的具体部分。对于由人脸图像组成的训练数据,这意味着生成器不会记忆眼睛、耳朵、嘴唇或鼻子等元素。另一方面,生成器不会直接看到训练数据。它所学习到的,只是来自鉴别器的反向传播误差反馈,而鉴别器本身只能做出图像真伪的二元原创 2022-05-03 21:27:21 · 261 阅读 · 0 评论 -
附录A 理想的损失值
附录A 理想的损失值在训练GAN时,我们希望达到的理想状态是,生成器与鉴别器之间达到平衡。这时,鉴别器无法区分真实数据与生成器生成的数据。因为生成器已经学会了生成看起来足以以假乱真的数据。我们来计算一下,当达到平衡时,鉴别器的损失值应该是多少。下面我们分别对均方误差(mean squared error, MSE)损失和二元交叉熵(binary cross entropy, BCE)损失进行计算。A.1 MSE损失均方误差损失的定义很简单。它先计算输出节点产生的值和预期的目标值之间的差值,也就是误差原创 2022-05-03 18:16:41 · 1257 阅读 · 0 评论 -
第3章 卷积GAN和条件式GAN:3.2 条件式GAN
3.2 条件式GAN之前,我们构建的MNIST GAN可以生成各种不同的输出图像。我们很好地避免了单一化和模式崩溃,它们是设计GAN时的主要挑战。如果能通过某种方式引导GAN生成多样化的图像,同时又仅限于生成训练数据中的一类图像,那将是非常有价值的。例如,我们可以要求GAN生成不同的、但都代表数字3的图像。又如,我们用人脸图像进行训练,如果情绪是训练数据中的一个类别,那么我们可以要求GAN只生成具有快乐表情的人脸图像。3.2.1 条件式GAN架构让我们构想一下这种架构会是什么样子的。如果希望让一原创 2022-05-03 17:31:53 · 1038 阅读 · 0 评论 -
第3章 卷积GAN和条件式GAN:3.1 卷积GAN2
3.1.7 CelebA CNN接下来,让我们将卷积层应用于GAN。CelebA数据集中的图像是217像素× 178像素的长方形。为了简化卷积过程,我们将使用128像素× 128像素的正方形图像。这意味着我们需要先对训练图像进行裁剪。以下代码是一个辅助函数,可以从一个numpy图像中裁剪任意大小的图像。裁剪的区域位于输入图像的正中央。要从一个较大的图像img中心截取一个128像素× 128像素的正方形区域,我们使用crop_centre(img, 128, 128)。在笔记本中,我们需要将该辅助原创 2022-05-01 20:36:03 · 1570 阅读 · 0 评论 -
第3章 卷积GAN和条件式GAN:3.1 卷积GAN1
在本章中,我们对GAN的核心概念加以扩展,并应用卷积神经网络。我们也将创建一个条件式GAN,用于生成指定类型的数据。原创 2022-04-29 22:46:11 · 2680 阅读 · 0 评论 -
第2章 GAN初步:2.4 生成人脸图像
2.4 生成人脸图像在本节中,我们将尝试训练GAN,使它可以生成人脸图像。与生成单色的手写数字图像相比,我们将面临以下两个全新的挑战。使用彩色图像作为训练数据,并学习生成全彩色图像。训练数据集中的图像更加多样化,也包含更多容易使人分心的 细节。2.4.1 彩色图像在数字图像中,有多种表示颜色的方法。最普遍的一种方法是将色彩描述为红、绿和蓝三种光的混合。我们在图像编辑器中选取颜色时,应该经常用到这种色彩表示方法。所有的数码显示器,比如笔记本电脑或智能手机屏幕,几乎都是由红色、绿色、蓝色的微小像素原创 2022-04-26 16:27:44 · 3985 阅读 · 1 评论 -
第2章 GAN初步:2.3 生成手写数字2
2.3.7 模式崩溃我们刚刚看到的现象,在GAN训练中非常常见,我们称它为模式崩溃(mode collapse)。或者,模式崩塌、模式坍塌。在MNIST的案例中,我们希望生成器能够创建代表所有10个数字的图像。当模式崩溃发生时,生成器只能生成10个数字中的一个或部分数字,无法达到我们的要求。发生模式崩溃的原因尚未被完全理解。许多相关的研究正在进行中,我们选取其中一些相对比较成熟的理论进行讨论。其中一种解释是,在鉴别器学会向生成器提供良好的反馈之前,生成器率先发现一个一直被判定为真实图像的输出。为此,原创 2022-04-25 17:46:14 · 1739 阅读 · 1 评论 -
第2章 GAN初步:2.3 生成手写数字1
在2.2节中,我们进行了大量的工作来编写GAN的框架,并熟悉了它的使用。这意味着,当我们从生成简单的1010格式规律过渡到生成看起来像手写数字的图像时,所需的工作量相对减少了。我们还是从一个架构图开始吧。如图所示,总体的架构仍然保持不变。真实图像由我们在第1章中使用过的MNIST数据集提供。生成器的任务是生成相同大小的图像。随着训练的进展,我们希望生成的图像越来越真实,并可以骗过鉴别器。在构建代码时,我们将复制之前构建MNIST分类器以及用于生成1010格式规律GAN的代码。2.3.1 数据类我们原创 2022-04-25 11:14:43 · 2893 阅读 · 0 评论 -
第2章 GAN初步:2.2 生成1010格式规律
2.2 生成1010格式规律现在,我们来构建一个GAN,用生成器学习创建符合1010格式规律的值。这个任务比生成图像要简单。通过这个任务,我们可以了解GAN的基本代码框架,并实践如何观察训练进程。完成这个简单的任务有助于我们为接下来生成图像的任务做好准备。跟之前一样,我们先用纸和笔把希望实现的架构画下来。我们看到的正是GAN的整体架构。真实的数据集被替换成了一个函数,会一直生成1010格式规律的数据。对于这样一个简单的数据源,我们不需要使用PyTorch的torch.utils.data.Datas原创 2022-04-25 09:31:17 · 1802 阅读 · 0 评论 -
第2章 GAN初步:2.1 GAN的概念
2.1 GAN的概念在探索GAN之前,我们先设定一个应用场景。2.1.1 生成图像通常情况下,我们使用神经网络来减少、提取、总结信息。MNIST分类器就是一个很好的例子。它有784个输入值,但只有10个输出值,输出值数量远小于输入值数量。让我们做一个思维实验。如果把一个神经网络的输入与输出反转,应该能够实现与“减少”相反的功能。换句话说,可以把较少的数据扩展成更多的数据。这样一来,我们就得到了图像数据。想象一下,一个可以自己创造数据的网络!这并不是天方夜谭。在《Python神经网络编程》中,原创 2022-04-24 09:40:30 · 628 阅读 · 0 评论 -
第1章 PyTorch和神经网:1.3 神经网络性能提升的改良方法
1.3.1 损失函数有时候,我们会把一些神经网络的输出值设计为连续范围的值。例如,一个预测温度的网络会输出0~100℃的任何值。也有时候,我们会把网络设计成输出true/false或1/0。例如,我们要判断一幅图像是不是猫,输出值应该尽量接近0.0或1.0,而不是介于两者之间。手写数字的图像进行分类是一个分类(classification)任务,更适合使用其他损失函数。一种常用的损失函数是二元交叉熵损失(binary cross entropy loss),它同时惩罚置信度(confidence)高的原创 2022-04-23 21:42:01 · 678 阅读 · 0 评论 -
第1章 PyTorch和神经网:1.2 初试PyTorch神经网络
1.2 初试PyTorch神经网络1.2.1 MNIST图像数据集MNIST数据集是一组常见的图像,常用于测评和比较机器学习算法的性能。其中6万幅图像用于训练机器学习模型,另外1万幅用于测试模型。这些大小为28像素× 28像素的单色(monochrome) 图像没有颜色。每个像素是一个0~255的数值,表示该像素的明暗度。1.2.2 获取MNIST数据集通过以下链接将MNIST数据集下载到我们的计算机本地硬盘。训练数据:https://pjreddie.com/media/files/mni原创 2022-04-22 22:22:42 · 3006 阅读 · 1 评论 -
第1章 PyTorch和神经网:1.1 PyTorch和神经网络
第1章 PyTorch和神经网络1.1 PyTorch入门1.1.2 PyTorch张量1.1.3 PyTorch的自动求导机制1.1.4 计算图自动梯度计算看似很神奇,但它其实并不是魔术。它背后的原理很值得深入了解,这些知识将帮助我们构建更大规模的网络。看看下面这个非常简单的网络。它甚至不算一个神经网络,而只是一系列计算。在上图中,我们看到输入x被用于计算y,y再被用于计算输出z。假设y和z的计算过程如下:如果我们希望知道输出zzz如何随xxx变化,我们需要知道梯度 dy/dxdy原创 2022-04-22 17:52:12 · 1283 阅读 · 0 评论