cactil 生成不了二元函数图像生成器,点击实时图是有图形的

在本教程中您将学习如何为二え函数图像生成器分类任务进行转移学习。 Keras的高级API使超级简单只需几个简单的步骤。

转移学习使我们能够使用少得多的数据来训练深度網络而如果我们从头开始训练的话,我们将需要它 通过转移学习,我们实际上是在将模型从先前任务中学到的“知识”转移到我们当湔的任务 这个想法是,这两个任务不是完全脱节的因此,我们可以利用模型通过广泛的培训中学到的任何网络参数而不必自己进行培训。

传递学习已得到一致证明可以提高模型的准确性并减少所需的培训时间。 数据更少时间更少,准确性更高

我们要做的第一件倳是准备我们的数据。 对于Keras中的二元函数图像生成器分类最简单的方法是将数据分类到每个类的文件夹中。 例如如果您的数据集具有3類:Pizza,Burger和Taco则您应具有3个文件夹,分别称为PizzaBurger和Taco。 您的每个文件夹都应包含该特定类的二元函数图像生成器 您的文件夹结构应如下所示:

接下来,我们可以选择要对其进行转移学习的模型 Keras为此提供了许多选择。在做出选择时您可以粗略地相信(出于此处的目的),较小的模型(以MB为单位)将更快但精度较低而较大的模型将较慢但更准确。截至今天为止MobileNet是最快的,而NASNetLarge是最准确的今天,我们将选择处于中间位置的ResNet50模型

查看下面的代码。我们首先导入必要的模型和预处理功能 ResNet50模型经过了非常特殊的预处理训练,我们将希望对其进行重新使鼡以对其进行适当的训练注意,当我们初始化基本模型时如何设置include_top = False。此设置很重要因为这意味着我们不会在模型的末尾保留全连接(FC)層。这正是我们想要的因为我们将训练我们自己的全新FC层进行迁移学习。

现在我们需要创建一个数据生成器,以实际方式自动从文件夾中获取数据并进入Keras Keras为此提供了方便的python生成器功能。

我们定义我们的训练目录“ food_dataset”其中包含我们之前设置的每个二元函数图像生成器類别的文件夹。 我们还定义了二元函数图像生成器尺寸和批量大小 Keras生成器将使用双线性插值自动将所有加载的二元函数图像生成器调整為target_size的大小。 我们将在生成器中添加一些额外的数据增强功能(翻转和旋转)以尝试提高模型的准确性。 我们使用flow_from_directory函数创建最终生成器该函數将使用队列来保持连续的加载和准备二元函数图像生成器流!

现在是时候为过渡学习建立我们的最终模型了。如果将来要再次使用它鈳能会发现为它编写函数非常方便。您可以从下面开始

首先冻结所有基本模型的图层。我们不想训练这些层因为我们试图利用网络从鉯前的数据集(在本例中为ImageNet)中学到的知识。通过设置 译者 | Yafei

转载请联系后台获得申请否则按照对应平台的规则投诉处理。

原标题:【文末有福利】生成对忼网络

以最大似然估计的方式来获得生成二元函数图像生成器模型的方法这种方法是可行的,但有比较大的约束即模型不能太复杂,仳如服从正态分布那么通过最大似然估计的方式就可以计算出,但如果是一个非常复杂的分布那么使用这种方式难以获得一个理想的模型,这种强制性的约束就会造成各种限制而我们希望的是可以为任意分布,这就需要引出GAN了

在GAN中有两个主要的组成部分,分别是生荿器与判别器这里先讨论生成器,因为通过最大似然估计的方式能以计算复杂分布的所以GAN的方法就是直接使用一个神经网络来完成这個事情,而这个神经网络就是生成器因为神经网络可以拟合任意的分布,所以生成器不存在最大似然估计会遇到的问题

对于GAN中的生成器而言,它会接收一个噪音输入这个噪音输入可以来自于正态分布、均匀分布或其他任意分布,经过生成器复杂的神经网络变换输出嘚数据就可以组成一种复杂的分布,最小化这个分布与真实分布的差异则可输入给生成器的数据其分布不用太在意,因为生成器是一个複杂的神经网络它有能力将输入的数据“改造”成各式各样的数据分布,直观如图1所示

那么对生成器而言,它的目标函数就为:

即最尛化生成分布与真实分布的距离

因为我们依旧无法准确的知道生成分布 与真实分布 具体的分布情况,所以依旧使用采样的方式来解决这個问题即从数据集中抽取一下样本将抽取出的样本的分布看成是 与 的分布,这种做法的背后思想其实是大数定理知道了两个分布后,僦可以通过训练生成器来最小化两分布的距离了

2 判别器计算分布的差异

生成器可以最小化生成分布 与 真实分布之间的距离了,但如何定義这个距离即生成器目标函数中的 如何定义?

GAN可以通过判别器来定义这两个分布的距离简单回顾一下判别器,如图2所示

使用真实数據与生成数据来训练判别器,训练的目标是让判别器可以分辨出那些数据是真实数据那些数据是判别器数据即对真实数据打高分,给生荿数据打低分其公式为如下:

对于从真实分布抽样的样本就打高分,即最大化对于从生成分布抽样的样本就打低分,即最大化那么判别器D的目标函数就为:

训练判别器就像训练一个二元分类器,其实质就是可以识别出真实数据与生成数据如图3所示.

从图可以看出,一開始生成器还不会生成与真实二元函数图像生成器很接近的生成二元函数图像生成器,此时判别器做二分类就可以轻易的识别出输入的數据是真实数据还是生成数据此时两种分布直接的相隔距离较大,但随着训练加多生成数据与真实数据的分布越来越接近,此时判别器就无法将生成数据会真实数据完全区分开了两分布的距离相隔较小。

回到一开始的话题生成器在训练时需要先定义出生成分布 与真實分布 的距离 ,而两分别的距离可以有判别器来定义即 ,生成器从而可以获得新的目标公式如下:

通过前面的讨论,已经明白了生成器用于拟合真实分布判别器用来测量真实分布与生成分布之间的距离,接着我们就来推导一下

因为训练生成器先要有两分布距离的定義,所以这里就先来推导推导如下:

将判别器的目标函数变换成积分的形式:

因为判别器希望最大,其实就是要求上式的中间部分最大即最大,为了简化计算我们将 记为 a,将记为D将记为b,将变换成如下形式:

要找到一个D使得数最大求其导数为0的值则可,公式为:

将上式进行简单的变化如下:

将a与b替换会原来的值,获得如下公式:

推导出了就可以将推导出的值代入到生成器的目标函数中,如丅:

将其变换为积分形式如下:

做一些简单的变换,如下:

上面推导出的这个公式其实就是JS散度回忆一下JS散度的公式,如下:

可以看絀用于类似的样式所以可以将 简化一下,其公式如下:

推导到这里就可以得出生成器最小化GAN的目标函数其实就是最小化真实分布与生荿分布之间的JS散度,即最小化两个分布的相对熵

直观的展示一下上面的公式推导,这里使用简单的二维的函数二元函数图像生成器来简囮复杂分布的表示如图4所示.

首先对判别器而言,其目标函数为即找到函数的最高点,如图中的红点就是该分布的最高点接着将该点玳入生成器的目标函数就可以获得一个高度 ,该高度就是生成分布与真实分布的JS散度生成器的目标就是最小化这个JS散度,而判别器的目標就是尽力测量出生成分布与真实分布的JS散度

通过上面对GAN目标函数的推导,最终发现GAN的目标函数其实就是JS散度那么GAN做的事情简单而言僦是通过判别器找到当前生成分布与真实分布的JS散度,然后在通过生成器生成数据构成新的生成分布从而减小生成分布与真实分布之间嘚JS散度。

从生成器的角度看它其实即使最小化 ,将 记为 那么生成器要做的就是对函数 做微分运算,计算出生成器参数要更新的值然後通 过梯度下降算法更新生成器的参数则可,如下:

一个值得思考的问题是可微分吗?其实是可微的具体例子,比如现在有函数求微分,其实就是对 中最大的 那个函数求微分其直观形式如图5所示。

因为 是有多个函数组成的所有对 求微分其实也就是对不同函数求微分,因为 只选择函数中最大的那么对于某个区域,就对该区域最大的函数求导则可如上图。

同理对于GAN中的 也是一样的,该函数求微分与普通函数求微分相似用数学语言描述GAN的训练过程如下:

  • 固定生成器G,训练判别器D获得 。

  • 固定判别器D对 做微分,从而计算出生荿器参数要更新的值

  • 往返上面两步,直到GAN收敛

一开始,判别器计算出在的位置将该位置的值代入可以获得生成分布与真实分布的JS散喥,即 然后再通过训练生成器来减少两分布之间的JS散度,训练生成器其实就是更新生成器上的各种参数而更新生成器的参数就会导致目标函数 发生变化,发生变化后的函数其 可能不在 所在的位置了上图中变化后的函数其 获得的值应该为 ,但训练时因为固定这判别器所以依旧使用的是 ,那么就无法获得生成分别与真实分布的JS散度了既然有这个问题,为什么依旧这样训练呢

通过上面的分布,可以知噵每次改变生成器G整个函数就会改变,此时固定的判别器D不一定再表示最大值 即无法获得两分布的JS散度,但在实际上依旧可以将当湔判别器获得的值看成与JS散度非常相近的值,因为生成器G在每次训练时不会相对于上一次有一个较大的变动,从而导致函数 变化过大此时就依旧可以近似将 看为是变动后函数 最大值的近似值,当生成器G经过一定次数训练后函数变化可能比较大了,此时再训练判别器D即找出新函数的JS散度。

在理论推导上判别器D可以推导计算出 ,但在实际实现上该值不一定是最大值,判别器D本身其实也是一个神经网絡我们训练该网络,希望可以找到 表示该函数最大的值但因为函数 可能会比较复杂,判别器通常无法获得该函数的全局最优而是获嘚该函数的局部最优,实际上在训练GAN网络时并不会强制要求判别器D要找到 全局最大值,只要获得一个可以接受的局部最优解则可

值得┅提的是,因为我们无法确切的获得真实分布 与生成分布 的值所以通过抽样的方式来获得样本,以样本的分布来近似的表示真实分布与苼成分布即 、 ,那么判别器的目标函数就可以改变成如下形式:

换个角度看判别器其实就是一个二元分类器,使用sigmoid激活函数作为最后┅层的输出(sigmoid输出的值在0~1之间) 是该二元分类器的积极样本,而 是该二元分类的消极样本通过两种不同的数据来训练该分类器,从而最小囮两分布的交叉熵损失最小化两分布的交叉熵损失等价于最大化 ,即

现在再回头来看GAN的算法,用数学语言描述如下:

  • 获得样本真实樣本 ,噪音样本 生成样本

  • 固定生成器G,训练判别器D

通常无法获得最大值局部最优则可

  • 固定判别器D,循生成器G

因为前面一项与生成器没囿关系所以可以将 简化为:

  • 通常我们会训练多次判别器D后才训练一次生成器,因为生成器参数更新太多就会让函数发生较大的变化,從而导致生成器减小的不再是两分布的JS散度

深入浅出GAN生成对抗网络

评论区留言,点赞数 前5可获得此书!!!

注:若是在活动截止日期后24尛时内无法取得用户回复或联系将按照留言点赞排名顺延。

我要回帖

更多关于 二元函数图像生成器 的文章

 

随机推荐