五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

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

MNIST數(shù)據(jù)集上Pytorch中的卷積自編碼器

2021-08-24 19:26 作者:深度之眼官方賬號  | 我要投稿

從pytorch進(jìn)行深度學(xué)習(xí)模型的學(xué)習(xí)系列教程已經(jīng)完成前5期啦!希望大家能跟著學(xué)姐共同進(jìn)步!學(xué)姐制作這部分教程就是為了大家能夠在新入門的時候通過實(shí)例使 Pytorch 盡可能地更加直觀和易于訪問。覺得不錯的就幫學(xué)姐宣傳宣傳吧!本篇主要內(nèi)容是《MNIST數(shù)據(jù)集上Pytorch中的卷積自編碼器》

自編碼器提供了一種壓縮圖像并提取最重要信息的方法。該模型還有許多擴(kuò)展以提高性能,其中一些是去噪自動編碼器、變分自動編碼器和生成對抗網(wǎng)絡(luò)。請大家認(rèn)真食用!


系列教程傳送門

  1. Pytorch初學(xué)者教程

  2. 了解深度學(xué)習(xí)模型中的張量維度

  3. CNN和特征可視化

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

  5. K折交叉驗證

    深入研究k折交叉驗證(K fold Cross Validation)


認(rèn)識自編碼器


自編碼器是一種無監(jiān)督的深度學(xué)習(xí)算法,它學(xué)習(xí)輸入數(shù)據(jù)的編碼表示,然后將相同的輸入重構(gòu)為輸出。它由編碼器和解碼器兩個網(wǎng)絡(luò)組成。Encoder將高維輸入壓縮為低維潛在代碼,也稱為潛在代碼或編碼空間,以從中提取最相關(guān)的信息,而Decoder則對編碼數(shù)據(jù)進(jìn)行解壓縮并重新創(chuàng)建原始輸入。


這種架構(gòu)的目標(biāo)是在編碼時最大化信息并最小化重構(gòu)誤差。


重構(gòu)誤差是什么?重構(gòu)誤差也可以叫重構(gòu)損失,通常是輸入為實(shí)值時,重構(gòu)輸入與原始輸入之間的均方誤差。如果輸入數(shù)據(jù)是分類數(shù)據(jù),則使用的損失函數(shù)是交叉熵?fù)p失。



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


使用torchvision庫導(dǎo)入數(shù)據(jù)集,下載訓(xùn)練和測試數(shù)據(jù)集,并將圖像數(shù)據(jù)集轉(zhuǎn)換為Tensor。


不需要對圖像進(jìn)行標(biāo)準(zhǔn)化,因為數(shù)據(jù)集包含彩色圖像,在將訓(xùn)練數(shù)據(jù)集劃分為訓(xùn)練集和驗證集之后,random_split這為這兩個集提供了一個隨機(jī)分區(qū)。DataLoader用于創(chuàng)建訓(xùn)練,驗證和測試集數(shù)據(jù)加載器,數(shù)據(jù)加載器被分割成小批量。batchsize是該模型的訓(xùn)練過程中每次迭代中使用的樣本的數(shù)目。



定義卷積自編碼器


在這里用卷積層定義自動編碼器。


卷積自編碼器由兩類組成:一類用于編碼器,一類用于解碼器。


編碼器將包含三個卷積層和兩個全連接層。


添加了一些批處理規(guī)范層作為正則化器,解碼器將具有相同的架構(gòu),但順序相反。



初始化損失函數(shù)和優(yōu)化器

我們需要在訓(xùn)練自動編碼器之前定義構(gòu)建塊:

  • torch.device?使用 GPU 等硬件加速器訓(xùn)練模型

  • 在Encoder與Decoder網(wǎng)絡(luò)中,將被移動到的設(shè)備

  • nn.MSEloss?和?torch.optim.Adam



訓(xùn)練模型和評估模型


我們定義了一個函數(shù)來訓(xùn)練 AE 模型

首先,將輸入圖像傳遞給編碼器。

然后,編碼后的數(shù)據(jù)被傳遞給編碼器,我們用loss_fn(x_hat,x)計算重構(gòu)損失。在我們清除梯度以不累積其他值后,我們執(zhí)行反向傳播。

最后,我們通過調(diào)用opt.step()來計算梯度。



創(chuàng)建訓(xùn)練函數(shù)后,定義一個函數(shù)來評估模型的性能。同上我們將圖像傳遞給編碼器,編碼后的圖像被傳遞給解碼器。


然后,將所有圖像批次和重建存儲到兩個不同的列表中,用于計算測試損失。



還有一個想法是:訓(xùn)練的每個時期看到重建的圖像,目的是了解自動編碼器如何從輸入圖像中學(xué)習(xí)。



接下來將測試代碼分解考慮規(guī)劃:

  • test_dataset[i][0].unsqueeze(0)用于從測試數(shù)據(jù)集中提取第i個圖像,然后在0軸上增加1維,此步驟需要將圖像傳遞給自動編碼器。


  • decoder(encoder(img))用于獲得重建圖像。


  • plt.imshow(img.cpu().squeeze().numpy())用于繪制原始圖像。

    squeeze()刪除之前添加的維度,對于可視化圖像至關(guān)重要。

    numpy()將tensor轉(zhuǎn)換為ndarray,這是函數(shù)plt.imshow接受的唯一對象類型。

    numpy()將tensor對象的副本返回到CPU內(nèi)存中。

現(xiàn)在正式開始在訓(xùn)練集上訓(xùn)練模型,并在驗證集上對其進(jìn)行評估了:





大家注意到自動編碼器能夠在30個epoch后很好地重建圖像,即使存在一些缺陷。因為這個模型相對簡單,所以看起來表現(xiàn)很好。


現(xiàn)在模型已經(jīng)訓(xùn)練完畢,我們要對測試集進(jìn)行最終評估:




利用下面的代碼我們可以得出到重建損失在各個時期是如何減少的:






從潛在代碼生成新樣本


為了從潛在代碼生成新圖像,我們定義了一個從潛在空間均勻采樣的函數(shù)。這些樣本將被傳遞到解碼器,解碼器將創(chuàng)建重建的圖像。




要繪制這些重建圖,我們需要知道潛在空間的范圍,可以在下面潛在空間可視化部分中看到。


從圖上我們可以看到,在圖的左下角,數(shù)字沒有意義。實(shí)際上,點(diǎn) (-1,-1) 處的潛在空間是空的。


用t-SNE可視化潛在空間


觀察動態(tài)可視化來查看自編碼器學(xué)習(xí)到的潛在空間。接下來首先,使用測試集創(chuàng)建編碼樣本。




現(xiàn)在使用plotly express庫繪制潛在空間,代碼如下:



從上面圖里,可以看出相似的數(shù)字聚集在一起,例如“4”與“9”和“5”重疊。


為了易讀,我們可以應(yīng)用稱為t-SNE的降維來可視化二維空間中的潛在代碼。那么現(xiàn)在我們將固定組件的數(shù)量等于 2:



上圖中清楚地區(qū)分了一個數(shù)字和另一個數(shù)字。除了其他類別的點(diǎn)有一些例外,但與之前的表示相比,t-SNE仍然是一個改進(jìn)。



實(shí)現(xiàn)卷積自編碼器基礎(chǔ)教程到這里就結(jié)束了,本節(jié)教程你是否掌握了?如果沒有就敲敲代碼嘗試嘗試吧!


代碼:

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


原文鏈接:

https://medium.com/dataseries/convolutional-autoencoder-in-pytorch-on-mnist-dataset-d65145c132ac#d75c


每天18:30分更新

關(guān)注+星標(biāo)+在看

不迷路看好文




MNIST數(shù)據(jù)集上Pytorch中的卷積自編碼器的評論 (共 條)

分享到微博請遵守國家法律
三门县| 宾川县| 龙岩市| 华蓥市| 八宿县| 六枝特区| 凤冈县| 威远县| 中方县| 昭苏县| 神木县| 江油市| 鲁山县| 顺平县| 洪泽县| 仙游县| 峡江县| 横峰县| 大余县| 崇仁县| 灵川县| 青田县| 中牟县| 香港 | 浦东新区| 寿阳县| 名山县| 旅游| 松滋市| 峨山| 潮安县| 平陆县| 龙州县| 芮城县| 祁东县| 宕昌县| 绥中县| 仙桃市| 三原县| 塔河县| 武功县|