最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

在Pytorch上用MNIST數(shù)據(jù)集訓(xùn)練和實(shí)現(xiàn)變分自動(dòng)編碼器

2021-09-02 19:16 作者:深度之眼官方賬號(hào)  | 我要投稿

歷時(shí)一個(gè)多月Pytorch構(gòu)建深度學(xué)習(xí)模型系列指南終于最后一篇啦!完結(jié)撒花!雖然戰(zhàn)線拉得有點(diǎn)長(zhǎng),但是有利于大家消化吸收里面的知識(shí)。



前幾期教程傳送門(mén):


1.Pytorch初級(jí)教程

2.認(rèn)識(shí)深度學(xué)習(xí)模型中的張量維度

3.CNN和特征可視化

4.使用Optuna調(diào)整超參數(shù)

5.K折交叉驗(yàn)證

6.學(xué)習(xí)自編碼器

7.去噪自動(dòng)編碼器


本篇是本系列教程的最后一篇,本篇要講解的是變分自動(dòng)編碼器的訓(xùn)練和實(shí)現(xiàn),這塊以前沒(méi)理解的同學(xué)可以試試這篇能否幫助你掌握這個(gè)知識(shí)點(diǎn)。



01?變分自動(dòng)編碼器(下面稱(chēng)變分自編碼器)


標(biāo)準(zhǔn)自動(dòng)編碼器可能存在潛在空間可能不規(guī)則的問(wèn)題 [1]。這意味著潛在空間的閉合點(diǎn)可以在可見(jiàn)單元上產(chǎn)生不同的無(wú)意義的圖案。


作為自動(dòng)編碼器,變分自動(dòng)編碼器由編碼器和解碼器兩個(gè)神經(jīng)網(wǎng)絡(luò)架構(gòu)組成。這個(gè)問(wèn)題的一個(gè)解決方案是引入變分自動(dòng)編碼器;但是編碼-解碼過(guò)程有一個(gè)修改,簡(jiǎn)單講解一下步驟:

  • 我們將輸入編碼為潛在空間上的分布,而不是將其視為單個(gè)點(diǎn)。該編碼分布被選擇為正態(tài)分布,以便可以訓(xùn)練編碼器返回均值矩陣和協(xié)方差矩陣。

  • 第二步,我們從編碼分布中采樣一個(gè)點(diǎn)。

  • 之后,我們可以解碼采樣點(diǎn)并計(jì)算重構(gòu)誤差。

  • 我們通過(guò)網(wǎng)絡(luò)反向傳播重建誤差。由于采樣過(guò)程是一個(gè)離散過(guò)程,所以它不是連續(xù)的,我們需要應(yīng)用重新參數(shù)化技巧來(lái)實(shí)現(xiàn)反向傳播工作:

02 VAE 損失函數(shù)


VAE 的損失由兩項(xiàng)組成:

  • 第一項(xiàng)是重構(gòu)項(xiàng),它是通過(guò)比較輸入及其對(duì)應(yīng)的重構(gòu)得到的。

  • 另一個(gè)術(shù)語(yǔ)是正則化項(xiàng),也稱(chēng)為編碼器返回的分布與標(biāo)準(zhǔn)正態(tài)分布之間的Kullback-Leibler 散度[3]。這個(gè)術(shù)語(yǔ)在潛在空間中起著正則化的作用,可能會(huì)使編碼器返回的分布接近標(biāo)準(zhǔn)正態(tài)分布。


03 使用Pytorch實(shí)現(xiàn)


與前面的教程一樣,變分自動(dòng)編碼器是在MNIST數(shù)據(jù)集上實(shí)現(xiàn)和訓(xùn)練的。


導(dǎo)入庫(kù)和數(shù)據(jù)集



定義一個(gè) VariationalAutoencoder 類(lèi),它結(jié)合Encoder類(lèi)和Decoder類(lèi) [3]。


編碼器和解碼器網(wǎng)絡(luò)包含三個(gè)卷積層和兩個(gè)全鏈接層。添加了一些批處理法線層,使其在潛在空間中具有更強(qiáng)的特性。與標(biāo)準(zhǔn)自動(dòng)編碼器不同,編碼器返回均值和方差矩陣,我們使用它們來(lái)獲得采樣的潛在向量。在VariationalEncoder類(lèi)中獲得Kullback-Leibler項(xiàng)。



定義Decoder類(lèi)之后,它與本系列第五篇教程中展示的那個(gè)類(lèi)保持一致。



下面定義合并編碼器和解碼器的類(lèi)


我們?cè)诖a中初始化VariationalAutoencoder類(lèi)、優(yōu)化器和使用GPU的設(shè)備。



定義用于訓(xùn)練和評(píng)估變分自動(dòng)編碼器的函數(shù):



上述理論中所描述的是損失由兩個(gè)項(xiàng)組成;重構(gòu)項(xiàng)是輸入與其重構(gòu)之間的差的平方和。其他一些版本使用BCE損失而不是MSE損失,但我更喜歡這種方式,因?yàn)樗幸饬x。


想要在VAE模型的訓(xùn)練過(guò)程中看到每個(gè)epoch中的輸入及其相應(yīng)的重構(gòu),定義一個(gè)函數(shù)來(lái)實(shí)現(xiàn)這些可視化:



最終訓(xùn)練VAE并在驗(yàn)證集中進(jìn)行評(píng)估:



這些是50個(gè)epoch后獲得的結(jié)果,我們看到輸入圖像與其重構(gòu)之間有很高的相似性,即便仍然存在一些缺陷。


為了估計(jì)變分自動(dòng)編碼器的學(xué)習(xí)能力,我們還可以從潛在代碼生成新圖像:




大多數(shù)生成的樣本看起來(lái)像數(shù)字,所以變分自編碼器似乎已經(jīng)從潛在空間中學(xué)到了穩(wěn)健的模式。


我們可以將變分解碼器學(xué)習(xí)的潛在代碼可視化,并按十類(lèi)數(shù)字進(jìn)行著色:



潛在空間的取值范圍更小、更集中,整體分布似乎接近高斯分布。


應(yīng)用t-SNE(一種降維方法)可以獲得更好的可視化效果,使用兩個(gè)組件,可視化潛在代碼:




由此產(chǎn)生的潛在代碼似乎將不同組中的數(shù)字聚集在一起,不同數(shù)字之間也有輕微的重疊。


總結(jié):

本篇文章用實(shí)戰(zhàn)代碼講解了使用Pytorch實(shí)現(xiàn)和訓(xùn)練變分自動(dòng)編碼器。它是自動(dòng)編碼器的擴(kuò)展,唯一的區(qū)別是它將輸入編碼為潛在空間上的分布。文末參考文獻(xiàn)可以幫助大家更深入地研究 VAE。


本文代碼:

https://github.com/eugeniaring/Pytorch-tutorial/blob/main/VAE_mnist.ipynb


參考文獻(xiàn):


[1]

https://towardsdatascience.com/understanding-variational-autoencoders-vaes-f70510919f73


[2]

https://atcold.github.io/pytorch-Deep-Learning/en/week08/08-3/


[3]

https://avandekleut.github.io/vae/


原文鏈接:

https://medium.com/dataseries/variational-autoencoder-with-pytorch-2d359cbf027b


每天18:30分更新

關(guān)注學(xué)姐公眾號(hào)+星標(biāo)+在看

不迷路看好文



在Pytorch上用MNIST數(shù)據(jù)集訓(xùn)練和實(shí)現(xiàn)變分自動(dòng)編碼器的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
河西区| 从化市| 梅河口市| 平昌县| 辽源市| 云龙县| 乌拉特中旗| 新邵县| 南郑县| 河北区| 宜川县| 辽阳县| 东明县| 铜梁县| 共和县| 白山市| 望城县| 年辖:市辖区| 仙桃市| 思南县| 拉孜县| 五大连池市| 长武县| 略阳县| 宜兰县| 孟连| 潞城市| 抚宁县| 南开区| 三河市| 军事| 寻甸| 高陵县| 三穗县| 阳东县| 云梦县| 齐齐哈尔市| 海门市| 门头沟区| 论坛| 张家界市|