kaggle競(jìng)賽報(bào)告:Generative Dog Images

這個(gè)競(jìng)賽的任務(wù)是根據(jù)給定的ImageNet中的120種狗狗圖片,生成這個(gè)圖片淤刃。

1 參考模型

1.1 模型1

DCGAN

1.2 模型2

WGAN

1.3 模型3

WGAN-GP(WGAN2)

1.4 模型4

WGAN-C

2 我的提交模型和LB結(jié)果

2.1 生成模型(fork from the job by Chris Detto)

在Chris的生成模型基礎(chǔ)上做一些改進(jìn)。

  • 模型改進(jìn)
  • 生成模型的學(xué)習(xí)算法改進(jìn)
  • 數(shù)據(jù)增廣(采用類似于mixup的方法)

2.1 DCGAN

2.2 WGAN

2.3 CGAN

3 最終LB結(jié)果

4 GAN訓(xùn)練的tricks

在keras中如何穩(wěn)健的訓(xùn)練GAN模型

原文作者Jason Brownlee

Generative Adversarial Networks, 或者多個(gè)GANs存在訓(xùn)練困難,對(duì)于這個(gè)比賽尤其困難,因?yàn)橹挥幸粋€(gè)P100的GPU和9個(gè)小時(shí)的訓(xùn)練時(shí)間拓哺。

言歸正傳,GAN的訓(xùn)練其實(shí)是一個(gè)零和問(wèn)題脖母,天生的難以訓(xùn)練士鸥。

但是可以參考這里。谆级,也許會(huì)有幫助烤礁。

教程目錄

主要由兩部分組成:

  1. 啟發(fā)式文件GANs的訓(xùn)練方法
  2. DCGAN的最優(yōu)實(shí)踐
    2.1. 使用Stride卷積進(jìn)行下采樣
    2.2. 使用Stride反卷積進(jìn)行上采樣
    2.3. 使用LeakyReLU
    2.4. 使用Batch Normalization
    2.5. 使用Gaussian Weight Initialization
    2.6. 使用Adam Stochastic Gradient Descent
    2.7. 將圖像歸一化到[-1,1]
  3. Soumith Chintala的GAN技巧
    3.1. 使用Gaussian隱變量空間
    3.2. 批量分開(kāi)真假圖像
    3.3. 使用Label Smoothing
    3.4. 使用噪聲Labels

1 啟發(fā)式文件GANs的訓(xùn)練方法

2 DCGAN的最優(yōu)實(shí)踐

2.1. 使用Stride卷積進(jìn)行下采樣

# example of downsampling with strided convolutions
from keras.models import Sequential
from keras.layers import Conv2D
# define model
model  =  Sequential()
model.add(Conv2D(64,  kernel_size=(3,3),  strides=(2,2),  padding='same',  input_shape=(64,64,3)))
# summarize model
model.summary()

2.2. 使用Stride反卷積進(jìn)行上采樣

# example of upsampling with strided convolutions
from keras.models import Sequential
from keras.layers import Conv2DTranspose
# define model
model  =  Sequential()
model.add(Conv2DTranspose(64,  kernel_size=(4,4),  strides=(2,2),  padding='same',  input_shape=(64,64,3)))
# summarize model
model.summary()

2.3. 使用LeakyReLU

# example of using leakyrelu in a discriminator model
from keras.models import Sequential
from keras.layers import Conv2D
from keras.layers import BatchNormalization
from keras.layers import LeakyReLU
# define model
model  =  Sequential()
model.add(Conv2D(64,  kernel_size=(3,3),  strides=(2,2),  padding='same',  input_shape=(64,64,3)))
model.add(LeakyReLU(0.2))
# summarize model
model.summary()

2.4. 使用Batch Normalization

# example of using batch norm in a discriminator model
from keras.models import Sequential
from keras.layers import Conv2D
from keras.layers import BatchNormalization
from keras.layers import LeakyReLU
# define model
model  =  Sequential()
model.add(Conv2D(64,  kernel_size=(3,3),  strides=(2,2),  padding='same',  input_shape=(64,64,3)))
model.add(BatchNormalization())
model.add(LeakyReLU(0.2))
# summarize model
model.summary()

2.5. 使用Gaussian Weight Initialization

# example of gaussian weight initialization in a generator model
from keras.models import Sequential
from keras.layers import Conv2DTranspose
from keras.initializers import RandomNormal
# define model
model  =  Sequential()
init  =  RandomNormal(mean=0.0,  stddev=0.02)
model.add(Conv2DTranspose(64,  kernel_size=(4,4),  strides=(2,2),  padding='same',  kernel_initializer=init,  input_shape=(64,64,3)))

2.6. 使用Adam Stochastic Gradient Descent

# example of using adam when training a discriminator model
from keras.models import Sequential
from keras.layers import Conv2D
from keras.optimizers import Adam
# define model
model  =  Sequential()
model.add(Conv2D(64,  kernel_size=(3,3),  strides=(2,2),  padding='same',  input_shape=(64,64,3)))
# compile model
opt  =  Adam(lr=0.0002,  beta_1=0.5)
model.compile(loss='binary_crossentropy',  optimizer=opt,  metrics=['accuracy'])

2.7. 將圖像歸一化到[-1,1]

# example of a function for scaling images
# scale image data from [0,255] to [-1,1]
def scale_images(images):
# convert from unit8 to float32
images  =  images.astype('float32')
# scale from [0,255] to [-1,1]
images  =  (images  -  127.5)  /  127.5
return  images

3. Soumith Chintala的GAN技巧

3.1 使用Gaussian隱變量空間

# example of sampling from a gaussian latent space
from numpy.random import randn
# generate points in latent space as input for the generator
def generate_latent_points(latent_dim,  n_samples):
  # generate points in the latent space
  x_input  =  randn(latent_dim *  n_samples)
  # reshape into a batch of inputs for the network
  x_input  =  x_input.reshape((n_samples,  latent_dim))
  return  x_input
# size of latent space
n_dim  =  100
# number of samples to generate
n_samples  =  500
# generate samples
samples  =  generate_latent_points(n_dim,  n_samples)
# summarize
print(samples.shape,  samples.mean(),  samples.std())

3.2. 批量分開(kāi)真假圖像

# get randomly selected 'real' samples
X_real,  y_real  =  ...
# update discriminator model weights
discriminator.train_on_batch(X_real,  y_real)
# generate 'fake' examples
X_fake,  y_fake  =  ...
# update discriminator model weights
discriminator.train_on_batch(X_fake,  y_fake)

3.3. 使用Label Smoothing

# example of positive label smoothing
from numpy import ones
from numpy.random import random
# example of smoothing class=1 to [0.7, 1.2]
def smooth_positive_labels(y):
  return  y  -  0.3  +  (random(y.shape)  *  0.5)
# generate 'real' class labels (1)
n_samples  =  1000
y  =  ones((n_samples,  1))
# smooth labels
y  =  smooth_positive_labels(y)
# summarize smooth labels
print(y.shape,  y.min(),  y.max())
# example of negative label smoothing
from numpy import zeros
from numpy.random import random
# example of smoothing class=0 to [0.0, 0.3]
def smooth_negative_labels(y):
  return  y  +  random(y.shape)  *  0.3
# generate 'fake' class labels (0)
n_samples  =  1000
y  =  zeros((n_samples,  1))
# smooth labels
y  =  smooth_negative_labels(y)
# summarize smooth labels
print(y.shape,  y.min(),  y.max())

3.4. 使用噪聲Labels

# example of noisy labels
from numpy import ones
from numpy import zeros
from numpy.random import choice
# randomly flip some labels
def noisy_labels(y,  p_flip):
  # determine the number of labels to flip
  n_select  =  int(p_flip *  y.shape[0])
  # choose labels to flip
  flip_ix  =  choice([i  for  i  in  range(y.shape[0])],  size=n_select)
  # invert the labels in place
  y[flip_ix]  =  1  -  y[flip_ix]
  return  y
# generate 'real' class labels (1)
n_samples  =  1000
y  =  ones((n_samples,  1))
# flip labels with 5% probability
y  =  noisy_labels(y,  0.05)
# summarize labels
print(y.sum())
# generate 'fake' class labels (0)
y  =  zeros((n_samples,  1))
# flip labels with 5% probability
y  =  noisy_labels(y,  0.05)
# summarize labels
print(y.sum())

API

論文參考

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市肥照,隨后出現(xiàn)的幾起案子脚仔,更是在濱河造成了極大的恐慌,老刑警劉巖舆绎,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鲤脏,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡亿蒸,警方通過(guò)查閱死者的電腦和手機(jī)凑兰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)边锁,“玉大人姑食,你說(shuō)我怎么就攤上這事∶┨常” “怎么了音半?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)贡蓖。 經(jīng)常有香客問(wèn)我曹鸠,道長(zhǎng),這世上最難降的妖魔是什么斥铺? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任彻桃,我火速辦了婚禮,結(jié)果婚禮上晾蜘,老公的妹妹穿的比我還像新娘邻眷。我一直安慰自己,他們只是感情好剔交,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布肆饶。 她就那樣靜靜地躺著,像睡著了一般岖常。 火紅的嫁衣襯著肌膚如雪驯镊。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音板惑,去河邊找鬼橄镜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛冯乘,可吹牛的內(nèi)容都是我干的蛉鹿。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼往湿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了惋戏?” 一聲冷哼從身側(cè)響起领追,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎响逢,沒(méi)想到半個(gè)月后绒窑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡舔亭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年些膨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钦铺。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡订雾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出矛洞,到底是詐尸還是另有隱情洼哎,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布沼本,位于F島的核電站噩峦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏抽兆。R本人自食惡果不足惜识补,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辫红。 院中可真熱鬧凭涂,春花似錦、人聲如沸厉熟。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)揍瑟。三九已至白翻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背滤馍。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工岛琼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人巢株。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓槐瑞,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親阁苞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子困檩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 所謂的對(duì)抗網(wǎng)絡(luò)可以歸結(jié)為unsupervised learning 或者 generative model...
    西方失敗9527閱讀 20,612評(píng)論 1 8
  • (轉(zhuǎn))生成對(duì)抗網(wǎng)絡(luò)(GANs)最新家譜:為你揭秘GANs的前世今生 生成對(duì)抗網(wǎng)絡(luò)(GAN)一...
    Eric_py閱讀 4,270評(píng)論 0 4
  • 3 GANs 如何工作? 我們現(xiàn)在已經(jīng)看過(guò)了幾種其他的生成式模型那槽,并解釋了 GANs 與他們的不同原理悼沿。但是 GA...
    朱小虎XiaohuZhu閱讀 1,482評(píng)論 0 4
  • 又到4月初,你的桃花運(yùn)開(kāi)始泛起骚灸。直到5月桃花運(yùn)開(kāi)始減退糟趾,趁著春暖花開(kāi)之季你要不出來(lái)轉(zhuǎn)一轉(zhuǎn),再好的桃花也與你無(wú)緣甚牲。 ...
    俠玩騎游閱讀 504評(píng)論 0 0
  • 昨天下午义郑,最后一節(jié)課,是我們班的班會(huì)課丈钙,班會(huì)課主題是:爭(zhēng)做新時(shí)代好少年非驮。 不文明的現(xiàn)象:⒈往學(xué)校帶...
    劉俊艷閱讀 230評(píng)論 0 0