美文网首页
从零单排fastai脚本(2)

从零单排fastai脚本(2)

作者: 深度学习模型优化 | 来源:发表于2019-05-29 06:51 被阅读0次

这次看下wgan脚本,这里使用fastai来完成wgan的训练和使用。

老三样,我就不加标题了

%reload_ext autoreload
%autoreload 2
%matplotlib inline

1 重要的包

from fastai.vision import *
from fastai.vision.gan import *

其中gan包是在../fastai/vision下的文件夹。大家从fastai的官网上下载源代码可以看见。

2 数据

本教程使用的脚本是LSun bedroom数据集,该数据集是卧室的图片,我们目的是使用fastai使用wgan生成卧室的图片。
这里使用了该数据集的一小部分,因为原始数据集实在是太大了。

使用data.show_batch()显示部分数据。

图1 部分数据示例

3 模型

生成对抗网络GAN有很多种。

这里使用WGAN(Wassertein GAN)。

模型训练过程如下:

WGAN有两部分:

  • 生成器(generator)
  • 对抗器(critic)
  1. freeze generator,然后训练critic。
  • 喂一个批次的真数据和假数据
  • 根据critic的损失,训练critic的网络。原则是奖励真目标,惩罚假目标。

2 freeze critic,然后训练generator。

  • 生成一个批次的假数据
  • 使用critic得到损失函数
  • 由损失函数训练generator网络。原则是奖励真目标,惩罚假目标。

4 模型训练

训练使用fit_one_cyclemax_lr=2e-4
这里对比了下Google和kaggle提供的免费模型训练平台。
因此我选择了kaggle的kernel,速度是真的快!但是不能超过9个小时,这个要注意。

这里的fastai需要事先定义:

generator = basic_generator(in_size=64, n_channels=3, n_extra_layers=1)
critic    = basic_critic   (in_size=64, n_channels=3, n_extra_layers=1)

learn = GANLearner.wgan(data, generator, critic, switch_eval=False,
                        opt_func = partial(optim.Adam, betas = (0.,0.99)), wd=0.)
# 模型训练
learn.fit(30,2e-4)

5 结果

learn.gan_trainer.switch(gen_mode=True)
learn.show_results(ds_type=DatasetType.Train, rows=16, figsize=(8,8))
图2 生成结果

相关文章

  • 从零单排fastai脚本(2)

    这次看下wgan脚本,这里使用fastai来完成wgan的训练和使用。 老三样,我就不加标题了 1 重要的包 其中...

  • 从零单排fastai脚本(1)

    1 简单的模拟下线性回归的问题 用这个来展示线性回归的过程。 2 jupyter notebook需要加载的东西 ...

  • 从零单排fastai脚本(3)

    使用BIWI人脑姿态数据集来回归人脑中心位置。 有请人工智能四大天王。 数据 模型 损失 算法 下面分别介绍fas...

  • 优秀文章(解决方案)收集

    【参考】Android Dagger2 从零单排(一) 基础注解Android Dagger2 从零单排(二) @...

  • Redis基础

    参考 从零单排学Redis【青铜】 从零单排学Redis【白银】 从零单排学Redis【黄金】 从零单排学Redi...

  • 从零单排

    毕业到现在两年,也有过一份不错的工作。但是作啊,不然怎么变成现在的模样(已经没工作一年)呢!犟亦或是执着,反正就是...

  • 从零单排的this

    说起this,我突然想到一个外国佬学中文的段子:解释文中每个意思的意思: 阿呆送领导红包。领导:你什么意思?阿呆:...

  • RxAndroid从零单排

    最近在学习Android,把每天的学习笔记作为内容发布在简书上 疑问一:什么是RxJava和RxAndroid?答...

  • gradle从零单排

    背景:写了好久的Android代码,对于gradle一直不太理解,今天开始从头学习gradle; 官网地址:htt...

  • 从零单排Java多线程(2)

    Java线程同步机制 锁概述 临界区:锁获得与锁释放之间执行的代码称为临界区 一个锁一次只能被一个线程持有,称为排...

网友评论

      本文标题:从零单排fastai脚本(2)

      本文链接:https://www.haomeiwen.com/subject/okzftctx.html