久久精品卡通在线|一级片视频免费观看|91AⅤ在线爱插射在线|无码a片网站中欧美在线精品|国产亚洲99久久精品|欧洲久久精品日本无码高清片|国产主播高清福利在线|国产一极小视频观看|国产十免费十无码十在线|国产一级视频在线观看免费

您當(dāng)前的位置:鋼材 > 型鋼 > 市場(chǎng)分析

生成對(duì)抗網(wǎng)絡(luò)的生成器,gan生成對(duì)抗網(wǎng)絡(luò)應(yīng)用

來(lái)源:頭條 作者: chanong
分享到
關(guān)注德勤鋼鐵網(wǎng)在線:
在線咨詢:
  • 掃描或點(diǎn)擊關(guān)注德勤鋼鐵網(wǎng)在線客服

來(lái)源:AI有道

本文長(zhǎng)約2820字,建議12分鐘。

在這篇文章中,我們將向大家介紹生成對(duì)抗網(wǎng)絡(luò)(GAN),并用最容易理解的術(shù)語(yǔ)進(jìn)行解釋,最后實(shí)現(xiàn)一個(gè)簡(jiǎn)單的GAN 程序,幫助大家更好地理解它。

什么是癌癥?

GAN非常強(qiáng)大,但是它的模型結(jié)構(gòu)是什么呢?我們之前學(xué)**的機(jī)器學(xué)**或者神經(jīng)網(wǎng)絡(luò)模型主要可以做兩件事。這是我們都熟悉的預(yù)測(cè)和分類。那么,機(jī)械模型能否自動(dòng)生成圖像和聲音呢?并且通過(guò)調(diào)整不同模型的輸入向量,我們可以獲得特定的圖像和聲音。例如,您可以調(diào)整輸入?yún)?shù)以獲得紅發(fā)藍(lán)眼的臉部,也可以調(diào)整輸入?yún)?shù)以獲得女性音頻片段。換句話說(shuō),這樣的機(jī)器模型可以根據(jù)需求自動(dòng)生成所需要的東西。這就是GAN 誕生的地方!

GAN(生成對(duì)抗網(wǎng)絡(luò))主要由兩個(gè)模塊組成。

生成器(生成模型)和判別器模型(判別模型)互相玩游戲,學(xué)**產(chǎn)生非常好的輸出。以攝影為例,生成器的主要任務(wù)是學(xué)**一組真實(shí)圖像,使其生成的圖像接近真實(shí)圖像并“欺騙”鑒別器。判別器的主要任務(wù)是找到生成器產(chǎn)生的圖像,將它們與真實(shí)圖像區(qū)分開(kāi)來(lái),并判斷它們是真還是假。在整個(gè)迭代過(guò)程中,生成器不斷努力使生成的圖像越來(lái)越真實(shí),而鑒別器則不斷努力識(shí)別圖像的真實(shí)性。這類似于生成器和判別器之間的游戲。最終,通過(guò)反復(fù)迭代,兩者會(huì)達(dá)到平衡。生成器產(chǎn)生的圖像將非常接近真實(shí)圖像,但鑒別器將難以識(shí)別真假圖像之間的差異。表現(xiàn)是判別器對(duì)于真假照片的概率輸出接近0.5。

對(duì)GAN 的概念還有點(diǎn)困惑嗎?沒(méi)關(guān)系。請(qǐng)舉一個(gè)生動(dòng)的例子來(lái)解釋。

最近在看黃老師的畫,想畫一些類似的東西,所以就想學(xué)美術(shù)。范主的照片是這樣的。

我只是想畫畫,所以我請(qǐng)了研究黃教授多年作品的王教授來(lái)教我。王教授經(jīng)驗(yàn)豐富,洞察力敏銳,即使是模仿扇子大師的商業(yè)畫也逃不過(guò)他的洞察力。王教授對(duì)我說(shuō): “如果你的照片能騙過(guò)我,就算你成功了!

我很興奮,立刻畫了這張圖給王教授。

王教授淡淡一笑,滿臉黑線,氣得渾身發(fā)抖。 “0分!這也是一幅畫嗎?太不一樣了!”聽(tīng)到王教授的話,我開(kāi)始反思自己。嗯,我絕對(duì)不擅長(zhǎng)畫畫,地上沒(méi)有眼睛鼻子。于是我又畫了一張。

王教授見(jiàn)狀,兩秒內(nèi)就吐出了四個(gè)字。 1分。重畫!當(dāng)我覺(jué)得還是不行或者畫得太爛的時(shí)候,我又研究了范老師的畫風(fēng),不斷改進(jìn)、再創(chuàng)作,有一天我給王老師看了一幅新畫。

王教授看到了,說(shuō)有點(diǎn)像。我需要仔細(xì)看看。最后我還是說(shuō):“不行不行,細(xì)節(jié)太差了!”繼續(xù)重新繪制。哎喲,王教授越來(lái)越嚴(yán)格了!我嘆了口氣,回去繼續(xù)研究,最后把那張非常滿意的畫交給了王教授看。

這時(shí),王教授戴上眼鏡,仔細(xì)地分析了一下,過(guò)了一會(huì)兒,王教授拍拍我的肩膀說(shuō):“畫得真好,真假難辨! ” 塔。哈哈,我很高興,因?yàn)榈玫搅送趵蠋煹馁潛P(yáng)和肯定,我感覺(jué)自己終于可以像黃老師一樣畫畫了。下一步是考慮換工作。

好的,例子就是這樣(我會(huì)接受你對(duì)我繪畫天賦的抱怨)。這個(gè)例子實(shí)際上是一個(gè)GAN的訓(xùn)練過(guò)程。我是一個(gè)生成器,我的目的是輸出一張可以欺騙王教授的圖片,讓王教授難以辨別真假。王教授是一個(gè)鑒別器,他的目的就是鑒別我的畫,判斷它是不是贗品。整個(gè)過(guò)程就是一個(gè)“生成器對(duì)決”的游戲過(guò)程,最終我(生成器)會(huì)輸出一張“假與真”的圖片,連王教授(識(shí)別者)都難以辨別。

這就是甘。

GAN模型的基本結(jié)構(gòu)

在了解GAN模型之前,我們先來(lái)看看Yann LeCun對(duì)未來(lái)深度學(xué)**關(guān)鍵技術(shù)進(jìn)展的個(gè)人看法。

在我看來(lái),最重要的是對(duì)抗訓(xùn)練(也稱為生成對(duì)抗網(wǎng)絡(luò)的GAN)。這是Ian Goodfellow 最初提出的想法,當(dāng)時(shí)他還是蒙特利爾大學(xué)Yoshua Bengio 的學(xué)生(后來(lái)轉(zhuǎn)到了Google Brain,最近轉(zhuǎn)到了OpenAI)。

在我看來(lái),這個(gè)以及當(dāng)前提出的變體是過(guò)去十年中機(jī)器學(xué)**領(lǐng)域最有趣的想法。

Yann LeCun 認(rèn)為,GAN 很可能會(huì)給深度學(xué)**模型帶來(lái)又一個(gè)重大突破,是過(guò)去20 年來(lái)機(jī)器學(xué)**領(lǐng)域最酷的想法。 GAN 近年來(lái)發(fā)展非常強(qiáng)勁。下圖顯示了最近提交給ICASSP 會(huì)議的所有論文中包含“生成”、“對(duì)抗性”和“強(qiáng)化”關(guān)鍵詞的論文數(shù)量。

數(shù)據(jù)顯示,2018年,包含“生成”和“對(duì)抗性”關(guān)鍵詞的論文數(shù)量急劇增加。不難預(yù)見(jiàn),未來(lái)幾年將會(huì)有更多關(guān)于GAN 的論文。

我們先介紹一下GAN的基本結(jié)構(gòu),我們已經(jīng)知道GAN由生成器和判別器組成,分別記為G和D。以圖像生成應(yīng)用為例,其模型結(jié)構(gòu)如下:

基本的GAN 模型由輸入向量、G 網(wǎng)絡(luò)和D 網(wǎng)絡(luò)組成。其中,G和D一般由神經(jīng)網(wǎng)絡(luò)組成。 G 的輸出是圖像,但采用全連接格式。 G的輸出是D的輸入,其中也包含實(shí)際的樣本集。這樣,D嘗試為真實(shí)樣本輸出較高的分?jǐn)?shù),為G生成的樣本輸出較低的分?jǐn)?shù)。在循環(huán)的每次迭代中,G網(wǎng)絡(luò)不斷優(yōu)化網(wǎng)絡(luò)參數(shù),使得D不再能區(qū)分真假,但D網(wǎng)絡(luò)也不斷優(yōu)化網(wǎng)絡(luò)參數(shù)以提高識(shí)別能力,這就造成了網(wǎng)絡(luò)參數(shù)之間的差距。真樣本分?jǐn)?shù)和假樣本分?jǐn)?shù)。

經(jīng)過(guò)多次訓(xùn)練迭代,最終建立了GAN模型。

最終的GAN模型中,G生成的樣本有假有真,D輸出的分?jǐn)?shù)接近0.5,因此很難區(qū)分真假樣本,訓(xùn)練成功。

這里我們將解釋輸入向量。輸入向量是用來(lái)做什么的?實(shí)際上,輸入向量的每個(gè)維度都可以代表輸出圖像的特定特征。例如,您可以輸入向量第一維的值來(lái)調(diào)整生成圖像中的頭發(fā)顏色。值越高,顏色越紅;值越低,顏色越黑。您可以通過(guò)在向量的第二維中輸入值來(lái)調(diào)整膚色。通過(guò)輸入生成的圖像矢量,您可以使用3D 值調(diào)整生成圖像的面部表情和情緒。

這就是GAN的強(qiáng)大之處;通過(guò)調(diào)整輸入向量,可以生成具有各種特征的圖像。這些生成的圖像不是實(shí)際樣本集的一部分,而是合理但看不見(jiàn)的圖像。是不是很有趣?下圖顯示不同的向量產(chǎn)生不同的圖像。

解釋完GAN模型,我們來(lái)快速了解一下GAN的算法原理。由于有G和D兩個(gè)模塊,每個(gè)模塊都有對(duì)應(yīng)的網(wǎng)絡(luò)參數(shù)。

我們先來(lái)看D模塊,它的目標(biāo)是讓實(shí)際樣本得分盡可能大,而G產(chǎn)生的樣本得分盡可能小。 D的損失函數(shù)可以如下獲得。

其中,x為實(shí)際樣本,G(z)為G生成的樣本。我們希望D(x) 更大,并且我們希望D(G(z)) 更小。也就是說(shuō),我們希望-D(x)盡可能小,并且-log(1-D(G(z)))越小越好。從損失函數(shù)的角度來(lái)看,我們得到上面的公式。

再看看G模塊,它的目標(biāo)是希望自己生產(chǎn)的模型能夠在D上取得更高的分?jǐn)?shù)。則G的損失函數(shù)可得:

一旦了解了損失函數(shù),您就可以使用各種優(yōu)化算法來(lái)訓(xùn)練模型。

創(chuàng)建GAN 模型

接下來(lái),使用PyTorch 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的GAN 模型。作為創(chuàng)建繪畫的示例,假設(shè)您創(chuàng)建了以下“名畫”(以正弦圖為例)。

生成這幅“藝術(shù)畫”的代碼是:

def Artist_works(): # 著名藝術(shù)家的畫作(實(shí)際目標(biāo))

r=0.02 * np.random.randn(1, ART_COMPONENTS)

繪畫=np.sin(PAINT_POINTS * np.pi) + r

繪畫=torch.from_numpy(painting).float()

歸還畫作

接下來(lái),我們分別定義G網(wǎng)絡(luò)模型和D網(wǎng)絡(luò)模型。

G=nn.Sequential( # 生成器

nn.Linear(N_IDEAS, 128),隨機(jī)想法的數(shù)量(可能來(lái)自正態(tài)分布)

ReLU(),

nn.Linear(128, ART_COMPONENTS), # 根據(jù)這些隨機(jī)想法創(chuàng)作繪畫

D=nn.Sequential( # 標(biāo)識(shí)符

nn.Linear(ART_COMPONENTS, 128), # 接收來(lái)自著名藝術(shù)家或像G 這樣的初學(xué)者的藝術(shù)作品

ReLU(),

nn.線性(128, 1),

nn.Sigmoid(), # 告訴藝術(shù)品是由藝術(shù)家創(chuàng)作的概率

設(shè)置Adam 算法進(jìn)行優(yōu)化。

opt_D=torch.optim.Adam(D.parameters(), lr=LR_D)

opt_G=torch.optim.Adam(G.parameters(), lr=LR_G)

最后,我們構(gòu)建了一個(gè)GAN迭代訓(xùn)練流程。

plt.ion() # 關(guān)于連續(xù)圖的一些事情

D_loss_history=[]

G_loss_history=[]

對(duì)于(10000): 范圍內(nèi)的步長(zhǎng)

Artist_paintings=Artist_works() # 藝術(shù)家的真實(shí)畫作

G_ideas=torch.randn(BATCH_SIZE, N_IDEAS) # 隨機(jī)想法

G_paintings=G(G_ideas) # G 的假畫(隨機(jī)想法)

prob_artist0=D(artist_paintings) # D 讓我們?cè)黾舆@個(gè)概率

prob_artist1=D(G_paintings) # D 讓我們嘗試降低這個(gè)概率

D_loss=- torch.mean(torch.log(prob_artist0) + torch.log(1. - prob_artist1))

G_loss=torch.mean(torch.log(1.-prob_artist1))

D_loss_history.append(D_loss)

G_loss_history.append(G_loss)

opt_D.zero_grad()

D_loss.backward(retain_graph=True) # 重用計(jì)算圖

opt_D.step()

opt_G.zero_grad()

G_loss.backward()

opt_G.step()

if 步驟% 50==0: # 繪圖

plt.cla()

plt.plot(PAINT_POINTS[0], G_paintings.data.numpy()[0], c='#4AD631', lw=3, label='生成的油漆',)

plt.plot(PAINT_POINTS[0], np.sin(PAINT_POINTS[0] * np.pi), c='#74BCFF', lw=3, label='標(biāo)準(zhǔn)曲線')

plt.text(-1, 0.75, 'D 精度=%.2f (D 收斂為0.5)' % prob_artist0.data.numpy().mean(), fontdict={'size': 8})

plt.text(-1, 0.5, 'D 分?jǐn)?shù)=%.2f (-1.38 表示G 收斂)' % -D_loss.data.numpy(), fontdict={'size': 8})

plt.ylim((-1, 1));plt.legend(loc='右下角', fontsize=10);plt.draw();plt.pause(0.01)

plt.ioff()

plt.show()

我們使用動(dòng)態(tài)繪圖,以便更容易地不斷觀察GAN 模型的訓(xùn)練狀態(tài)。

如果迭代次數(shù)為1:

如果迭代次數(shù)為200:

如果迭代次數(shù)為1000:

如果迭代次數(shù)為10000:

完美!經(jīng)過(guò)10,000 次訓(xùn)練迭代后,生成的曲線非常接近標(biāo)準(zhǔn)曲線。正如預(yù)期,D 的分?jǐn)?shù)接近0.5。

完整的代碼有.py 和.ipynb 版本,可以通過(guò)搜索下面的鏈接找到。

https://github.com/RedstoneWill/MachineLearningInAction/tree/master/GAN

責(zé)任編輯:德勤鋼鐵網(wǎng) 標(biāo)簽:

熱門搜索

相關(guān)文章

廣告
德勤鋼鐵網(wǎng) |市場(chǎng)分析

生成對(duì)抗網(wǎng)絡(luò)的生成器,gan生成對(duì)抗網(wǎng)絡(luò)應(yīng)用

chanong

|

來(lái)源:AI有道

本文長(zhǎng)約2820字,建議12分鐘。

在這篇文章中,我們將向大家介紹生成對(duì)抗網(wǎng)絡(luò)(GAN),并用最容易理解的術(shù)語(yǔ)進(jìn)行解釋,最后實(shí)現(xiàn)一個(gè)簡(jiǎn)單的GAN 程序,幫助大家更好地理解它。

什么是癌癥?

GAN非常強(qiáng)大,但是它的模型結(jié)構(gòu)是什么呢?我們之前學(xué)**的機(jī)器學(xué)**或者神經(jīng)網(wǎng)絡(luò)模型主要可以做兩件事。這是我們都熟悉的預(yù)測(cè)和分類。那么,機(jī)械模型能否自動(dòng)生成圖像和聲音呢?并且通過(guò)調(diào)整不同模型的輸入向量,我們可以獲得特定的圖像和聲音。例如,您可以調(diào)整輸入?yún)?shù)以獲得紅發(fā)藍(lán)眼的臉部,也可以調(diào)整輸入?yún)?shù)以獲得女性音頻片段。換句話說(shuō),這樣的機(jī)器模型可以根據(jù)需求自動(dòng)生成所需要的東西。這就是GAN 誕生的地方!

GAN(生成對(duì)抗網(wǎng)絡(luò))主要由兩個(gè)模塊組成。

生成器(生成模型)和判別器模型(判別模型)互相玩游戲,學(xué)**產(chǎn)生非常好的輸出。以攝影為例,生成器的主要任務(wù)是學(xué)**一組真實(shí)圖像,使其生成的圖像接近真實(shí)圖像并“欺騙”鑒別器。判別器的主要任務(wù)是找到生成器產(chǎn)生的圖像,將它們與真實(shí)圖像區(qū)分開(kāi)來(lái),并判斷它們是真還是假。在整個(gè)迭代過(guò)程中,生成器不斷努力使生成的圖像越來(lái)越真實(shí),而鑒別器則不斷努力識(shí)別圖像的真實(shí)性。這類似于生成器和判別器之間的游戲。最終,通過(guò)反復(fù)迭代,兩者會(huì)達(dá)到平衡。生成器產(chǎn)生的圖像將非常接近真實(shí)圖像,但鑒別器將難以識(shí)別真假圖像之間的差異。表現(xiàn)是判別器對(duì)于真假照片的概率輸出接近0.5。

對(duì)GAN 的概念還有點(diǎn)困惑嗎?沒(méi)關(guān)系。請(qǐng)舉一個(gè)生動(dòng)的例子來(lái)解釋。

最近在看黃老師的畫,想畫一些類似的東西,所以就想學(xué)美術(shù)。范主的照片是這樣的。

我只是想畫畫,所以我請(qǐng)了研究黃教授多年作品的王教授來(lái)教我。王教授經(jīng)驗(yàn)豐富,洞察力敏銳,即使是模仿扇子大師的商業(yè)畫也逃不過(guò)他的洞察力。王教授對(duì)我說(shuō): “如果你的照片能騙過(guò)我,就算你成功了!

我很興奮,立刻畫了這張圖給王教授。

王教授淡淡一笑,滿臉黑線,氣得渾身發(fā)抖。 “0分!這也是一幅畫嗎?太不一樣了!”聽(tīng)到王教授的話,我開(kāi)始反思自己。嗯,我絕對(duì)不擅長(zhǎng)畫畫,地上沒(méi)有眼睛鼻子。于是我又畫了一張。

王教授見(jiàn)狀,兩秒內(nèi)就吐出了四個(gè)字。 1分。重畫!當(dāng)我覺(jué)得還是不行或者畫得太爛的時(shí)候,我又研究了范老師的畫風(fēng),不斷改進(jìn)、再創(chuàng)作,有一天我給王老師看了一幅新畫。

王教授看到了,說(shuō)有點(diǎn)像。我需要仔細(xì)看看。最后我還是說(shuō):“不行不行,細(xì)節(jié)太差了!”繼續(xù)重新繪制。哎喲,王教授越來(lái)越嚴(yán)格了!我嘆了口氣,回去繼續(xù)研究,最后把那張非常滿意的畫交給了王教授看。

這時(shí),王教授戴上眼鏡,仔細(xì)地分析了一下,過(guò)了一會(huì)兒,王教授拍拍我的肩膀說(shuō):“畫得真好,真假難辨。” ” 塔。哈哈,我很高興,因?yàn)榈玫搅送趵蠋煹馁潛P(yáng)和肯定,我感覺(jué)自己終于可以像黃老師一樣畫畫了。下一步是考慮換工作。

好的,例子就是這樣(我會(huì)接受你對(duì)我繪畫天賦的抱怨)。這個(gè)例子實(shí)際上是一個(gè)GAN的訓(xùn)練過(guò)程。我是一個(gè)生成器,我的目的是輸出一張可以欺騙王教授的圖片,讓王教授難以辨別真假。王教授是一個(gè)鑒別器,他的目的就是鑒別我的畫,判斷它是不是贗品。整個(gè)過(guò)程就是一個(gè)“生成器對(duì)決”的游戲過(guò)程,最終我(生成器)會(huì)輸出一張“假與真”的圖片,連王教授(識(shí)別者)都難以辨別。

這就是甘。

GAN模型的基本結(jié)構(gòu)

在了解GAN模型之前,我們先來(lái)看看Yann LeCun對(duì)未來(lái)深度學(xué)**關(guān)鍵技術(shù)進(jìn)展的個(gè)人看法。

在我看來(lái),最重要的是對(duì)抗訓(xùn)練(也稱為生成對(duì)抗網(wǎng)絡(luò)的GAN)。這是Ian Goodfellow 最初提出的想法,當(dāng)時(shí)他還是蒙特利爾大學(xué)Yoshua Bengio 的學(xué)生(后來(lái)轉(zhuǎn)到了Google Brain,最近轉(zhuǎn)到了OpenAI)。

在我看來(lái),這個(gè)以及當(dāng)前提出的變體是過(guò)去十年中機(jī)器學(xué)**領(lǐng)域最有趣的想法。

Yann LeCun 認(rèn)為,GAN 很可能會(huì)給深度學(xué)**模型帶來(lái)又一個(gè)重大突破,是過(guò)去20 年來(lái)機(jī)器學(xué)**領(lǐng)域最酷的想法。 GAN 近年來(lái)發(fā)展非常強(qiáng)勁。下圖顯示了最近提交給ICASSP 會(huì)議的所有論文中包含“生成”、“對(duì)抗性”和“強(qiáng)化”關(guān)鍵詞的論文數(shù)量。

數(shù)據(jù)顯示,2018年,包含“生成”和“對(duì)抗性”關(guān)鍵詞的論文數(shù)量急劇增加。不難預(yù)見(jiàn),未來(lái)幾年將會(huì)有更多關(guān)于GAN 的論文。

我們先介紹一下GAN的基本結(jié)構(gòu),我們已經(jīng)知道GAN由生成器和判別器組成,分別記為G和D。以圖像生成應(yīng)用為例,其模型結(jié)構(gòu)如下:

基本的GAN 模型由輸入向量、G 網(wǎng)絡(luò)和D 網(wǎng)絡(luò)組成。其中,G和D一般由神經(jīng)網(wǎng)絡(luò)組成。 G 的輸出是圖像,但采用全連接格式。 G的輸出是D的輸入,其中也包含實(shí)際的樣本集。這樣,D嘗試為真實(shí)樣本輸出較高的分?jǐn)?shù),為G生成的樣本輸出較低的分?jǐn)?shù)。在循環(huán)的每次迭代中,G網(wǎng)絡(luò)不斷優(yōu)化網(wǎng)絡(luò)參數(shù),使得D不再能區(qū)分真假,但D網(wǎng)絡(luò)也不斷優(yōu)化網(wǎng)絡(luò)參數(shù)以提高識(shí)別能力,這就造成了網(wǎng)絡(luò)參數(shù)之間的差距。真樣本分?jǐn)?shù)和假樣本分?jǐn)?shù)。

經(jīng)過(guò)多次訓(xùn)練迭代,最終建立了GAN模型。

最終的GAN模型中,G生成的樣本有假有真,D輸出的分?jǐn)?shù)接近0.5,因此很難區(qū)分真假樣本,訓(xùn)練成功。

這里我們將解釋輸入向量。輸入向量是用來(lái)做什么的?實(shí)際上,輸入向量的每個(gè)維度都可以代表輸出圖像的特定特征。例如,您可以輸入向量第一維的值來(lái)調(diào)整生成圖像中的頭發(fā)顏色。值越高,顏色越紅;值越低,顏色越黑。您可以通過(guò)在向量的第二維中輸入值來(lái)調(diào)整膚色。通過(guò)輸入生成的圖像矢量,您可以使用3D 值調(diào)整生成圖像的面部表情和情緒。

這就是GAN的強(qiáng)大之處;通過(guò)調(diào)整輸入向量,可以生成具有各種特征的圖像。這些生成的圖像不是實(shí)際樣本集的一部分,而是合理但看不見(jiàn)的圖像。是不是很有趣?下圖顯示不同的向量產(chǎn)生不同的圖像。

解釋完GAN模型,我們來(lái)快速了解一下GAN的算法原理。由于有G和D兩個(gè)模塊,每個(gè)模塊都有對(duì)應(yīng)的網(wǎng)絡(luò)參數(shù)。

我們先來(lái)看D模塊,它的目標(biāo)是讓實(shí)際樣本得分盡可能大,而G產(chǎn)生的樣本得分盡可能小。 D的損失函數(shù)可以如下獲得。

其中,x為實(shí)際樣本,G(z)為G生成的樣本。我們希望D(x) 更大,并且我們希望D(G(z)) 更小。也就是說(shuō),我們希望-D(x)盡可能小,并且-log(1-D(G(z)))越小越好。從損失函數(shù)的角度來(lái)看,我們得到上面的公式。

再看看G模塊,它的目標(biāo)是希望自己生產(chǎn)的模型能夠在D上取得更高的分?jǐn)?shù)。則G的損失函數(shù)可得:

一旦了解了損失函數(shù),您就可以使用各種優(yōu)化算法來(lái)訓(xùn)練模型。

創(chuàng)建GAN 模型

接下來(lái),使用PyTorch 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的GAN 模型。作為創(chuàng)建繪畫的示例,假設(shè)您創(chuàng)建了以下“名畫”(以正弦圖為例)。

生成這幅“藝術(shù)畫”的代碼是:

def Artist_works(): # 著名藝術(shù)家的畫作(實(shí)際目標(biāo))

r=0.02 * np.random.randn(1, ART_COMPONENTS)

繪畫=np.sin(PAINT_POINTS * np.pi) + r

繪畫=torch.from_numpy(painting).float()

歸還畫作

接下來(lái),我們分別定義G網(wǎng)絡(luò)模型和D網(wǎng)絡(luò)模型。

G=nn.Sequential( # 生成器

nn.Linear(N_IDEAS, 128),隨機(jī)想法的數(shù)量(可能來(lái)自正態(tài)分布)

ReLU(),

nn.Linear(128, ART_COMPONENTS), # 根據(jù)這些隨機(jī)想法創(chuàng)作繪畫

D=nn.Sequential( # 標(biāo)識(shí)符

nn.Linear(ART_COMPONENTS, 128), # 接收來(lái)自著名藝術(shù)家或像G 這樣的初學(xué)者的藝術(shù)作品

ReLU(),

nn.線性(128, 1),

nn.Sigmoid(), # 告訴藝術(shù)品是由藝術(shù)家創(chuàng)作的概率

設(shè)置Adam 算法進(jìn)行優(yōu)化。

opt_D=torch.optim.Adam(D.parameters(), lr=LR_D)

opt_G=torch.optim.Adam(G.parameters(), lr=LR_G)

最后,我們構(gòu)建了一個(gè)GAN迭代訓(xùn)練流程。

plt.ion() # 關(guān)于連續(xù)圖的一些事情

D_loss_history=[]

G_loss_history=[]

對(duì)于(10000): 范圍內(nèi)的步長(zhǎng)

Artist_paintings=Artist_works() # 藝術(shù)家的真實(shí)畫作

G_ideas=torch.randn(BATCH_SIZE, N_IDEAS) # 隨機(jī)想法

G_paintings=G(G_ideas) # G 的假畫(隨機(jī)想法)

prob_artist0=D(artist_paintings) # D 讓我們?cè)黾舆@個(gè)概率

prob_artist1=D(G_paintings) # D 讓我們嘗試降低這個(gè)概率

D_loss=- torch.mean(torch.log(prob_artist0) + torch.log(1. - prob_artist1))

G_loss=torch.mean(torch.log(1.-prob_artist1))

D_loss_history.append(D_loss)

G_loss_history.append(G_loss)

opt_D.zero_grad()

D_loss.backward(retain_graph=True) # 重用計(jì)算圖

opt_D.step()

opt_G.zero_grad()

G_loss.backward()

opt_G.step()

if 步驟% 50==0: # 繪圖

plt.cla()

plt.plot(PAINT_POINTS[0], G_paintings.data.numpy()[0], c='#4AD631', lw=3, label='生成的油漆',)

plt.plot(PAINT_POINTS[0], np.sin(PAINT_POINTS[0] * np.pi), c='#74BCFF', lw=3, label='標(biāo)準(zhǔn)曲線')

plt.text(-1, 0.75, 'D 精度=%.2f (D 收斂為0.5)' % prob_artist0.data.numpy().mean(), fontdict={'size': 8})

plt.text(-1, 0.5, 'D 分?jǐn)?shù)=%.2f (-1.38 表示G 收斂)' % -D_loss.data.numpy(), fontdict={'size': 8})

plt.ylim((-1, 1));plt.legend(loc='右下角', fontsize=10);plt.draw();plt.pause(0.01)

plt.ioff()

plt.show()

我們使用動(dòng)態(tài)繪圖,以便更容易地不斷觀察GAN 模型的訓(xùn)練狀態(tài)。

如果迭代次數(shù)為1:

如果迭代次數(shù)為200:

如果迭代次數(shù)為1000:

如果迭代次數(shù)為10000:

完美!經(jīng)過(guò)10,000 次訓(xùn)練迭代后,生成的曲線非常接近標(biāo)準(zhǔn)曲線。正如預(yù)期,D 的分?jǐn)?shù)接近0.5。

完整的代碼有.py 和.ipynb 版本,可以通過(guò)搜索下面的鏈接找到。

https://github.com/RedstoneWill/MachineLearningInAction/tree/master/GAN


市場(chǎng)分析