PK10人工免费计划怎么入门,微软剑桥研究院153页

2019-10-17 00:47栏目:互联网
TAG:

原标题:微软剑桥研究院153页最新GAN教程(附代码)

人生苦短我用GAN

  • Python介绍

【导读】Sebastian Nowozin在机器学习夏季课程(MLSS 2018年9月)做了关于GAN的教学,153页PPT详尽的解释了GAN的发展脉络和最新进展,此外他所提供原版大小为286MB 的pptx中包含大量动画效果,对课程的理解很有帮助。

首先声明一下,本教程面向入门吃瓜群众,大牛可以绕道,闲话不多说,先方一波广告。(高级GAN玩法),怎么说,我越来越感觉到人工智能正在迎来生成模型的时代,以前海量数据训练模型的办法有点揠苗助长,看似效果很好,实际上机器什么卵都没有学到(至少从迁移性上看缺少一点味道,不过就图片领域来说另当别论,在CV领域监督学习还是相当成功)。
但是问题来了,GAN这么屌这么牛逼,我怎么搞?怎么入门?谁带我?慌了!

脚本语言;
简单、易学、免费、开源、可移植性好、面向对象、可扩展、丰富的库等等

Sebastian Nowozin是微软剑桥研究院首席研究院,专注于无监督于表示学习。他在GAN领域做了大量的工作,同时也是著名的f-GAN的作者。

莫慌,50行代码你就可以成为无监督学习大牛

我最讨厌那些,嘴里一堆算法,算法实现不出来的人。因为我喜欢看到结果啊!尤其是一些教程,就是将论文,鸡巴论文奖那么多有什么用?你码代码给我看啊,我不知道数据是什么,不知道输入维度是什么,输出什么,里面到底发生了什么变化我怎么学?这就有点像,典型的在沙漠里教你钓鱼,在我看来,论文应该是最后才去看的东西。但是问题在于,你要有一个入门的教程啊。我想这是一个鸿沟,科研里面,理论和动手的鸿沟。
这篇教程就是引路人了。欢迎加入生成模型队伍。这个教程会一直保持更新,因为科技每天变幻莫测,同时我还会加入很多新内容,改进一些在以后看来是错误的说法。

首先,我们废话不多说了,直接show you the code:

import numpy as np
import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.autograd import Variable
import matplotlib.pyplot as plt
from scipy import stats


def generate_real_data_distribution(n_dim, num_samples):
    all_data = []
    for i in range(num_samples):
        x = np.random.uniform(0, 8, n_dim)
        y = stats.lognorm.pdf(x, 0.6)
        all_data.append(y)
    all_data = np.array(all_data)
    print('generated data shape: ', all_data.shape)
    return all_data


def batch_inputs(all_data, batch_size=6):
    assert isinstance(all_data, np.ndarray), 'all_data must be numpy array'
    batch_x = all_data[np.random.randint(all_data.shape[0], size=batch_size)]
    return Variable(torch.from_numpy(batch_x).float())


def main():
    # 给generator的噪音维数
    n_noise_dim = 30
    # 真实数据的维度
    n_real_data_dim = 256
    num_samples = 666
    lr_g = 0.001
    lr_d = 0.03
    batch_size = 6
    epochs = 1000

    real_data = generate_real_data_distribution(n_real_data_dim, num_samples=num_samples)
    print('sample from real data: n', real_data[: 10])

    g_net = nn.Sequential(
        nn.Linear(n_noise_dim, 128),
        nn.ReLU(),
        nn.Linear(128, n_real_data_dim)
    )

    d_net = nn.Sequential(
        nn.Linear(n_real_data_dim, 128),
        nn.ReLU(),
        nn.Linear(128, 1),
        nn.Sigmoid()
    )

    opt_d = torch.optim.Adam(d_net.parameters(), lr=lr_d)
    opt_g = torch.optim.Adam(g_net.parameters(), lr=lr_g)

    for epoch in range(epochs):
        for i in range(num_samples // batch_size):
            batch_x = batch_inputs(real_data, batch_size)
            batch_noise = Variable(torch.randn(batch_size, n_noise_dim))

            g_data = g_net(batch_noise)

            # 用G判断两个输出分别多大概率是来自真正的画家
            prob_fake = d_net(g_data)
            prob_real = d_net(batch_x)

            # 很显然,mean里面的这部分是一个负值,如果想整体loss变小,必须要变成正直,加一个负号,否则会越来越大
            d_loss = -torch.mean(torch.log(prob_real) + torch.log(1 - prob_fake))
            # 而g的loss要使得discriminator的prob_fake尽可能小,这样才能骗过它,因此也要加一个负号
            g_loss = -torch.mean(torch.log(prob_fake))

            opt_d.zero_grad()
            d_loss.backward(retain_variables=True)
            opt_d.step()

            opt_g.zero_grad()
            g_loss.backward(retain_variables=True)
            opt_g.step()

            print('Epoch: {}, batch: {}, d_loss: {}, g_loss: {}'.format(epoch, i, d_loss.data.numpy()[0],
                                                                        g_loss.data.numpy()[0]))

if __name__ == '__main__':
    main()

这些代码,总共,也就是90行,核心代码50行,基本上,比你写一个其他程序都端,什么红黑算法,什么排序之类的。我个人比较喜欢简约,我很多时候不喜欢太鸡巴隆昌的代码。

  • Python安装

在训练 GAN 方面似乎有两三个阵营:第一个当然就是GAN的发明Ian Goodfellow以及他所供职的OpenAI和谷歌的一帮研究人员;**第二个强大的阵营也就是以这篇教程作者Sebastian Nowozin 为代表的微软阵营**;第三就是其他了

直接开始训练吧

这个GAN很简单,三部分:

  • real data生成,这个real data我们怎么去模拟呢?注意这里用的数据是二维的,不是图片,图片是三维的,二维你可以看成是csv,或者是序列,在这里面我们每一行,也就是一个样本,是sample自某个分布的数据,这里用的分布式lognorm;
  • d_net 和 g_net,这里两个net都是非常小,小到爆炸,这如果要是用tensorflow写就有点蛋疼了,我选择PyTorch,一目了然;
  • loss,loss在GAN中非常重要,是接下来的重点。

OK,一阵复制粘贴,你就可以训练一个GAN,这个GAN用来做什么?就是你随机输入一个噪音,生成模型将会生成一个和lognorm分布一样的数据。也就是说,生成模型学到了lognrom分布。这能说明什么?神经网络学到了概率!用到图片里面就是,他知道哪个颜色快可能是什么东西,这也是现在的CycleGAN, DiscoGAN的原理。

linux系统:判断是否安装 python -v
Windows系统: 下载软件安装即可

此次教程主要有以下几个部分:

我吃饭去了

未完待续...

  • 最初的步骤

概率模型

来了

继续刚才的,好像我写的文章没有人看啊,伤感。自己写自己看吧,哎,我骚味改了一下代码,loss函数部分,之前的写错了,我偷一张图把。

PK10人工免费计划 1

这个是公式,原始GAN论文里面给的公式,但是毫无疑问,正如很多人说的那样,GAN很容易漂移:

Epoch: 47, batch: 66, d_loss: 0.7026655673980713, g_loss: 2.0336945056915283
Epoch: 47, batch: 67, d_loss: 0.41225430369377136, g_loss: 2.1994106769561768
Epoch: 47, batch: 68, d_loss: 0.674636960029602, g_loss: 1.5774009227752686
Epoch: 47, batch: 69, d_loss: 0.5779278874397278, g_loss: 2.2797725200653076
Epoch: 47, batch: 70, d_loss: 0.4029145836830139, g_loss: 2.200833559036255
Epoch: 47, batch: 71, d_loss: 0.7264774441719055, g_loss: 1.5658557415008545
Epoch: 47, batch: 72, d_loss: 0.46858924627304077, g_loss: 2.355680227279663
Epoch: 47, batch: 73, d_loss: 0.6716371774673462, g_loss: 1.7127293348312378
Epoch: 47, batch: 74, d_loss: 0.7237206101417542, g_loss: 1.4458404779434204
Epoch: 47, batch: 75, d_loss: 0.9684935212135315, g_loss: 1.943861961364746
Epoch: 47, batch: 76, d_loss: 0.4705852270126343, g_loss: 2.439894199371338
Epoch: 47, batch: 77, d_loss: 0.4989328980445862, g_loss: 1.5290288925170898
Epoch: 47, batch: 78, d_loss: 0.44530192017555237, g_loss: 2.9254989624023438
Epoch: 47, batch: 79, d_loss: 0.6329593658447266, g_loss: 1.7527830600738525
Epoch: 47, batch: 80, d_loss: 0.42348209023475647, g_loss: 1.856258749961853
Epoch: 47, batch: 81, d_loss: 0.5396828651428223, g_loss: 2.268836498260498
Epoch: 47, batch: 82, d_loss: 0.9727945923805237, g_loss: 1.0528483390808105
Epoch: 47, batch: 83, d_loss: 0.7551510334014893, g_loss: 1.508225917816162
Epoch: 47, batch: 84, d_loss: 2.4204068183898926, g_loss: 1.5375216007232666
Epoch: 47, batch: 85, d_loss: 1.517686128616333, g_loss: 0.6334291100502014
Epoch: 47, batch: 86, d_loss: inf, g_loss: 0.7990849614143372
Epoch: 47, batch: 87, d_loss: nan, g_loss: nan
Epoch: 47, batch: 88, d_loss: nan, g_loss: nan
Epoch: 47, batch: 89, d_loss: nan, g_loss: nan
Epoch: 47, batch: 90, d_loss: nan, g_loss: nan
Epoch: 47, batch: 91, d_loss: nan, g_loss: nan

你如果train一下的话会发现,到一定程度就会nan,这个nan我就无法理解了,按道理来说,从loss来看我们定义的来自以log,如果为无穷那么应该是log(0)了,但是我们的discriminator出来的函数是sigmoid啊,sigmoid不可能为0,只看是0-1且不包括闭区间。这个问题比较玄学。

既然nan的话,我也不深究是因为啥了,总之这个重点在于loss,因为后面GAN的变种基本上都是在loss的训练形式上。

挑选合适的编辑器。
#符号右面的内容都是注释
Linux系统下运行:chmod a+x helloworld.py
echo $PATH 来显示PATH变量
help()帮助了解命令含义 q退出

GANs的几个示范应用

GAN 生成mnist

我们现在玩一下mnist把。

  • 基本概念

评价原则

交流

我见了一个GAN群,加我微信让我拉进来。jintianiloveu, 顺便下载一个我做的app吧,内侧中,专门用来看美女图片的,你懂得。。传送门

数:整数、长整数、浮点数和复数。
字符串:""",转义符,Unicode字符。
变量
标识符命名:大小写敏感、字母数字下划线(开头不能有数字)
对象
逻辑行:用;隔开,清晰理解。

GAN 模型

  • 运算符和表达式
  • 差异性与f-GAN 家族
  • 基于积分概率度量(IPM)的GAN: MMD
  • 基于积分概率度量(IPM)的GAN: Wasserstein GANs

位运算 左移、右移、位与、位或、位异或
运算符优先级

问题与如何修正:模式崩溃(modecollapse)与不稳定性(Instability)

  • 控制流

隐式模型

if、while、for、break、continue

开放性研究问题

  • 函数

GAN网络是近两年深度学习领域的新秀,一时风头无两。从计算机视觉顶会盛会CVPR 2018接受的论文统计就可见一斑:根据Google Research的研究科学家Jordi Pont-Tuset做的一个统计,它通过查看这些论文的类型,看到了未来深度学习的发展趋势。结果,他发现生成对抗网络(GAN)强势出击,大有取代“深度学习”(Deep Learning)之势。

形参与实参。调用函数时,实参值赋给形参。
局部变量:函数内部定义的变量与外部完全没有关系。产生效果的区域成为局部作用域。
全局变量:定义全局变量。在函数内部使用global语句。(不推荐)
默认参数值:def func(a, b=5)是有效的,但是def func(a=5, b)是 无效的。
关键参数:我们可以只给我们想要的那些参数赋值。
return语句:没有返回值的return语句等价于return None。None是Python中表示没有任何东西的特殊类型。
文档字符串:方便程序的阅读理解。

下面这张图展示了CVPR 2018的论文题目中,关键词GAN、Deep,以及LSTM的对比:

  • 模块

PK10人工免费计划 2

sys模块:sys模块包含了与Python解释器和它的环境有关的函数。
.pyc文件: 字节编译的文件 ,这些文件以.pyc作为扩展名。
from..import语句: from sys import argv语句。
模块的name:获取模块的名称。main为当前程序。
制造你自己的模块:记住这个模块应该被放置在我们输入它的程序的同一个目录中,或者在sys.path所列目录之一。
dir():内建的dir函数来列出模块定义的标识符。标识符有函数、类和变量。

在普通的“深度学习”走下坡路的同时,GAN慢慢的成为新宠,统计显示有8%的论文标题中含有GAN(这一数据相比2017年增长了2倍多)。

  • 数据结构

此外用尽字母表的各种GAN的变体 X-GAN 的论文数量也是急剧增加:

列表:len(list)、list.append、list.sort、del list[0]
元组:元组和字符串一样是不可变的,即你不能修改元组。元组通过圆括号中用逗号分割的项目定义。
字典:它们的键/值对用冒号分割,而各个对用逗号分割,所有这些都包括在花括号中。
赋值:d[key]= value
删除:del d[key]
迭代出每一项:for name,address in ab.items():
序列:列表、元组、字符串都属于序列。序列的两个特点:索引操作符和切片操作符。
引用:当你创建一个对象并给它赋一个变量的时候,这个变量仅仅 引用 那个对象,而不是表示这个对象本身!
字符串方法: in操作符用来检验一个给定字符串是否为另一个字符串的一部分。
find方法用来找出给定字符串在另一个字符串中的位置,或者返回-1以表示找不到子字符串。
str类也有以一个作为分隔符的字符串join序列的项目的整洁的方法,它返回一个生成的大字符串。

PK10人工免费计划 3

  • 面向对象编程
  • 后台回复“GANMLSS” 就可以获取最新PPT下载链接~

self:类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是
在调用这个方法的时候你不为这个参数赋值,Python会提供这个值。这个特别的变量指对象本
身,按照惯例它的名称是self。
init方法: init方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的初始化 。
类与对象的方法:类的变量 由一个类的所有对象(实例)共享使用。对象的变量 由类的每个对象/实例拥有。
继承:基本类的init方法专门使用self变量调用。

参考链接:

  • 输入输出

模式可以为读模式('r')、写模式('w')或追加模式('a')。
使用file类的write方法来写文件,最后我们用close关闭这个文件。
使用readline方法读文件的每一行。
存储与去存储没看懂。

  • 异常

附PPT全文:

用try..except语句来处理异常。
用raise来引发异常。
try...finally异常发生后有语句仍然执行。

PK10人工免费计划 4

  • python标准库

PK10人工免费计划 5

sys模块。
os模块。

PK10人工免费计划 6

  • 更多python内容

PK10人工免费计划 7

init(self, ...)
del(self)
str(self)
lt(self, other)
getitem(self, key)
len(self)
列表生成式
单语句块
lambda语句
exec语句用来执行储存在字符串或文件中的Python语句:
>>> exec 'print "Hello World"
eval语句用来计算存储在字符串中的有效Python表达式。
>>> eval('2*3')
assert语句用来声明某个条件是真的。当assert语句失败的时候,会引发一个AssertionError。
repr函数

PK10人工免费计划 8


PK10人工免费计划 9

书中代码整理在Github上:《A Byte of Python》

PK10人工免费计划 10

PK10人工免费计划 11

PK10人工免费计划 12

PK10人工免费计划 13

PK10人工免费计划 14

PK10人工免费计划 15

PK10人工免费计划 16

PK10人工免费计划 17

PK10人工免费计划 18

PK10人工免费计划 19

PK10人工免费计划 20

PK10人工免费计划 21

PK10人工免费计划 22

PK10人工免费计划 23

PK10人工免费计划 24

PK10人工免费计划 25

PK10人工免费计划 26

PK10人工免费计划 27

PK10人工免费计划 28

PK10人工免费计划 29

PK10人工免费计划 30

PK10人工免费计划 31

PK10人工免费计划 32

PK10人工免费计划 33

PK10人工免费计划 34

PK10人工免费计划 35

PK10人工免费计划 36

PK10人工免费计划 37

PK10人工免费计划 38

PK10人工免费计划 39

PK10人工免费计划 40

PK10人工免费计划 41

PK10人工免费计划 42

PK10人工免费计划 43

PK10人工免费计划 44

PK10人工免费计划 45

PK10人工免费计划 46

PK10人工免费计划 47

PK10人工免费计划 48

PK10人工免费计划 49

PK10人工免费计划 50

PK10人工免费计划 51

PK10人工免费计划 52

PK10人工免费计划 53

PK10人工免费计划 54

PK10人工免费计划 55

PK10人工免费计划 56

PK10人工免费计划 57

PK10人工免费计划 58

PK10人工免费计划 59

PK10人工免费计划 60

PK10人工免费计划 61

PK10人工免费计划 62

PK10人工免费计划 63

PK10人工免费计划 64

PK10人工免费计划 65

PK10人工免费计划 66

PK10人工免费计划 67

PK10人工免费计划 68

PK10人工免费计划 69

PK10人工免费计划 70

PK10人工免费计划 71

PK10人工免费计划 72

PK10人工免费计划 73

PK10人工免费计划 74

PK10人工免费计划 75

PK10人工免费计划 76

PK10人工免费计划 77

PK10人工免费计划 78

PK10人工免费计划 79

PK10人工免费计划 80

PK10人工免费计划 81

PK10人工免费计划 82

PK10人工免费计划 83

PK10人工免费计划 84

PK10人工免费计划 85

PK10人工免费计划 86

PK10人工免费计划 87

PK10人工免费计划 88

PK10人工免费计划 89

PK10人工免费计划 90

PK10人工免费计划 91

PK10人工免费计划 92

PK10人工免费计划 93

PK10人工免费计划 94

PK10人工免费计划 95

PK10人工免费计划 96

PK10人工免费计划 97

PK10人工免费计划 98

PK10人工免费计划 99

PK10人工免费计划 100

PK10人工免费计划 101

PK10人工免费计划 102

PK10人工免费计划 103

PK10人工免费计划 104

PK10人工免费计划 105

PK10人工免费计划 106

PK10人工免费计划 107

PK10人工免费计划 108

PK10人工免费计划 109

PK10人工免费计划 110

PK10人工免费计划 111

PK10人工免费计划 112

PK10人工免费计划 113

PK10人工免费计划 114

PK10人工免费计划 115

PK10人工免费计划 116

PK10人工免费计划 117

PK10人工免费计划 118

PK10人工免费计划 119

PK10人工免费计划 120

PK10人工免费计划 121

PK10人工免费计划 122

PK10人工免费计划 123

PK10人工免费计划 124

PK10人工免费计划 125

PK10人工免费计划 126

PK10人工免费计划 127

PK10人工免费计划 128

PK10人工免费计划 129

PK10人工免费计划 130

PK10人工免费计划 131

PK10人工免费计划 132

PK10人工免费计划 133

PK10人工免费计划 134

PK10人工免费计划 135

PK10人工免费计划 136

PK10人工免费计划 137

PK10人工免费计划 138

PK10人工免费计划 139

PK10人工免费计划 140

PK10人工免费计划 141

PK10人工免费计划 142

PK10人工免费计划 143

-END-

专 · 知

人工智能领域26个主题知识资料全集获取与加入专知人工智能服务群: 欢迎微信扫一扫加入专知人工智能知识星球群,获取专业知识教程视频资料和与专家交流咨询!

请PC登录www.zhuanzhi.ai或者点击阅读原文,注册登录专知,获取更多AI知识资料!

请加专知小助手微信(扫一扫如下二维码添加),加入专知主题群(请备注主题类型:AI、NLP、CV、 KG等)交流~

AI 项目技术 & 商务合作:bd@zhuanzhi.ai, 或扫描上面二维码联系!

请关注专知公众号,获取人工智能的专业知识!返回搜狐,查看更多

责任编辑:

版权声明:本文由PK10人工免费计划发布于互联网,转载请注明出处:PK10人工免费计划怎么入门,微软剑桥研究院153页