Keras的对抗模型和优化程序

keras-adversarial的Python项目详细描述


将多个模型合并为一个keras模型。甘斯放轻松了!

AdversarialModel模拟多人游戏。一个电话 model.fit为每个玩家获取目标并更新所有 玩家。使用AdversarialOptimizer完全控制 更新是同时的、交替的,或者完全是其他的。否 更愚蠢的是Trainable

安装

git clone https://github.com/bstriner/keras_adversarial.git
cd keras_adversarial
python setup.py install

用法

请检查示例文件夹中的示例用法。

实例化对抗模型

  • 为每个组件/播放器(如生成器)构建单独的模型 还有鉴别器。
  • 建立一个组合模型。对于gan,这可能有一个输入 图像和噪声输入,d(假)和输出 对于d(实数)
  • 将组合模型和单独模型传递给 AdversarialModel构造函数
adversarial_model=AdversarialModel(base_model=gan,player_params=[generator.trainable_weights,discriminator.trainable_weights],player_names=["generator","discriminator"])

生成的模型将具有与gan相同的输入,但是是独立的 每个玩家的目标和指标。这是通过复制 每个玩家的模型。如果每个玩家有不同的模式,使用 player_models(关于辍学,见下文)。

adversarial_model=AdversarialModel(player_models=[gan_g,gan_d],player_params=[generator.trainable_weights,discriminator.trainable_weights],player_names=["generator","discriminator"])

编制对抗模型

使用adversarial_compile编译模型。参数是 AdversarialOptimizer和每个对象的Optimizer对象列表 玩家。每个模型的损失都传递给model.compile,因此可能 成为字典或其他物品。使用相同的顺序 player_optimizers就像你对player_paramsplayer_names

model.adversarial_compile(adversarial_optimizer=adversarial_optimizer,player_optimizers=[Adam(1e-4,decay=1e-4),Adam(1e-3,decay=1e-4)],loss='binary_crossentropy')

训练一个简单的对抗模型

对抗模型可以使用fit和回调进行训练,就像 任何其他凯拉斯模型。只要确保提供正确的目标 正确的顺序。

例如,给定名为gan:*的简单gan输入:[x]* 目标:[y_fake, y_real]*指标: [loss, loss_y_fake, loss_y_real]

AdversarialModel(base_model=gan, player_names=['g','d']...)将 有:*个输入:[x]*个目标: [g_y_fake, g_y_real, d_y_fake, d_y_real]*度量: [loss, g_loss, g_loss_y_fake, g_loss_y_real, d_loss, d_loss_y_fake, d_loss_y_real]

对抗优化器

优化多人游戏有很多可能的策略。 AdversarialOptimizer是抽象这些策略的基类 并负责创建培训功能。* AdversarialOptimizerSimultaneous同时更新每个播放器 *AdversarialOptimizerAlternating更新 循环*UnrolledAdversarialOptimizer展开更新到 稳定训练(仅在ano中测试;建立图表速度慢但运行 相当快)

示例

mnist生成性对抗网络(gan)

example_gan.py 演示如何在keras中为mnist数据集创建gan。

Example GAN

示例gan

cifar10生成性对抗网络(gan)

example_gan_cifar10.py 演示如何在keras中为cifar10数据集创建gan。

Example GAN

示例gan

mnist双向生成对抗网络(bigan)

example_bigan.py 演示如何在keras中创建bigan。

Example BiGAN

示例bigan

mnist对抗性自动编码器(aae)

aae就像gan和变分自动编码器之间的交叉。 (呼气)。 example_aae.py 演示如何在Keras中创建aae。

Example AAE

示例aae

展开的生成性对抗网络

example_gan_unrolled.py 演示如何使用展开优化器。

警告:展开鉴别器8次大约需要6小时 在我的电脑上建立这个功能,但只有几分钟的时间 训练。准备好让它长时间运行或降低深度 四点左右。

注释

辍学

当使用辍学来训练对手模型时,您可能需要创建 每个玩家有不同的型号。

如果你想训练一个辍学的鉴别器,但是训练 生成器对鉴别器无脱落,创建两个模型。 *列车发电机:^{TT28}$*甘托 列车识别器:D(G(z, dropout=0), dropout=0.5)

如果创建单独的模型,请使用 AdversarialModel构造函数。

如果不使用dropout,一个模型就足够了,并使用 base_model参数的AdversarialModel构造函数,它将 为每个玩家复制base_model

Theano和Tensorflow

我大部分的发展都是在theano完成的,但是我试着在 有多余的时间。目标是支持两者。请告诉我 两个后端都有问题。

有问题吗?

如果你有任何问题或公关,可以在这里或Keras开始。 任何可能有用的问题或想法。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Android butterknife多索引   在Java中选择ShowMessage对话框右上角的x按钮后,joptionpane是否退出系统?   java名称和编译时变量的生存期   java Android行使用按钮变得不可访问   JAVAutil。列出ArrayList和LinkedList中的子列表(int,int)行为   无法在服务器上使用java程序执行简单的“whoami”unix命令   Selenium Java页面工厂:从属性文件读取并在Selenium中传递值(SendKeys)   线程“main”java中出现异常。lang.NullPointerException   hadoop如何将Java代码转换为mapreduce?   java如何获取所有测试套件的历史记录结果?   JavaApachePOI。使用行。getLastCellNum()用于检索非空白单元格的数量   使用泛型类型Java创建对象   数据库数据未存储在Java src文件夹中的SQLite DB上   java生产者消费者问题   数组在Java中拆分字符串并将其插入空字符串   Spring boot(2.0.3.RELEASE)应用程序中的java内存泄漏   java无法连接Javascript和Struts标记   带有web的JavaJSF库。xml