當前位置:
首頁 > 新聞 > 用Pytorch構建一個自動解碼器

用Pytorch構建一個自動解碼器

本文為 AI 研習社編譯的技術博客,原標題 :

Building Autoencoder in Pytorch

作者 | Vipul Vaibhaw

翻譯 | 鄧普斯?傑弗、醬番梨、向日魁

校對 | 鄧普斯?傑弗 整理 | 菠蘿妹

原文鏈接:

https://medium.com/@vaibhaw.vipul/building-autoencoder-in-pytorch-34052d1d280c

這篇文章中,我們將利用 CIFAR-10 數據集通過 Pytorch 構建一個簡單的卷積自編碼器。

用Pytorch構建一個自動解碼器

打開今日頭條,查看更多圖片

引用維基百科的定義,」自編碼器是一種人工神經網路,在無監督學習中用於有效編碼。自編碼的目的是通過一組數據學習出一種特徵(編碼),通常用於降維。「

為了建立一個自編碼器,我們需要三件事:一個編碼函數,一個解碼函數,和一個衡量壓縮特徵和解壓縮特徵間信息損失的距離函數(也稱為損失函數)。

如果我們要在 Pytorch 中編寫自動編碼器,我們需要有一個自動編碼器類,並且必須使用super從父類繼承__init__。

我們通過導入必要的 Pytorch 模塊開始編寫卷積自動編碼器。

import torchimport torchvision as tvimport torchvision.transforms as transformsimport torch.nn as nnimport torch.nn.functional as Ffrom torch.autograd import Variablefrom torchvision.utils import save_image

現在我們設置下載CIFAR-10數據集並將其轉換應用於它。

我們對數據集應用了兩個轉換 -

  1. ToTensor - 它將 PIL圖像或者 [0,255]範圍內的 numpy.ndarray(H x W x C)轉換成 Torch 。 [0.0,1.0]範圍內的形狀 FloatTensor。

  2. Normalize - 使用均值和標準差對張量圖像進行標準化。

基本上在應用變換之後,我們得到(-2,2)範圍內的值 。

# Loading and Transforming datatransform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.4914, 0.4822, 0.4466), (0.247, 0.243, 0.261))])trainTransform = tv.transforms.Compose([tv.transforms.ToTensor(), tv.transforms.Normalize((0.4914, 0.4822, 0.4466), (0.247, 0.243, 0.261))])trainset = tv.datasets.CIFAR10(root="./data", train=True,download=True, transform=transform)dataloader = torch.utils.data.DataLoader(trainset, batch_size=32, shuffle=False, num_workers=4)testset = tv.datasets.CIFAR10(root="./data", train=False, download=True, transform=transform)classes = ("plane", "car", "bird", "cat", "deer", "dog", "frog", "horse", "ship", "truck")testloader = torch.utils.data.DataLoader(testset, batch_size=4, shuffle=False, num_workers=2)

你可以在這裡閱讀更多關於上述變換的內容。 現在下一步是編寫自動編碼類。

# Writing our modelclass Autoencoder(nn.Module): def __init__(self): super(Autoencoder,self).__init__ self.encoder = nn.Sequential( nn.Conv2d(3, 6, kernel_size=5), nn.ReLU(True), nn.Conv2d(6,16,kernel_size=5), nn.ReLU(True)) self.decoder = nn.Sequential( nn.ConvTranspose2d(16,6,kernel_size=5), nn.ReLU(True), nn.ConvTranspose2d(6,3,kernel_size=5), nn.ReLU(True), nn.Sigmoid) def forward(self,x): x = self.encoder(x) x = self.decoder(x) return x

卷積編碼器神經網路具有一些 Conv2d,並且我們有使用ReLU激活功能正在被使用。 現在我們定義一些參數 -

#defining some paramsnum_epochs = 5 #you can go for more epochs, I am using a macbatch_size = 128

然後是時候設置訓練模型了。我們調用模型並將其配置為在 cpu 上運行。如果你有一個 gpu,你可以使用 cuda。

我們使用 Mean Squared Error 作為損失函數。對於優化器,我們使用 adam。

model = Autoencoder.cpudistance = nn.MSELossoptimizer = torch.optim.Adam(model.parameters,weight_decay=1e-5)

讓咱們開始訓練吧!

for epoch in range(num_epochs): for data in dataloader: img, _ = data img = Variable(img).cpu # ===================forward===================== output = model(img) loss = distance(output, img) # ===================backward==================== optimizer.zero_grad loss.backward optimizer.step # ===================log======================== print("epoch [{}/{}], loss:{:.4f}".format(epoch+1, num_epochs, loss.data[0]))

這是我寫的一個簡單的博客,展示了如何在 Pytorch 中構建自動編碼器。 但是,如果要在模型中包含 MaxPool2d,請確保設置 return_indices = True,然後在解碼器中使用 MaxUnpool2d圖層。

持續的學習和分享,可以在 github,Stack Overflow,LinkedIn,或者 Twitter 上 Follow 我。

想要繼續查看該篇文章相關鏈接和參考文獻?

長按鏈接點擊打開或點擊【用Pytorch構建一個自動解碼器】:

https://ai.yanxishe.com/page/TextTranslation/1284

AI研習社每日更新精彩內容,觀看更多精彩內容:雷鋒網雷鋒網雷鋒網

命名實體識別(NER)綜述傑出數據科學家的關鍵技能是什麼?初學者怎樣使用Keras進行遷移學習如果你想學數據科學,這 7 類資源千萬不能錯過

等你來譯:

深度學習目標檢測演算法綜述一文教你如何用PyTorch構建 Faster RCNN高級DQNs:利用深度強化學習玩吃豆人遊戲用於深度強化學習的結構化控制網路 (ICML 論文講解)
喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雷鋒網 的精彩文章:

落戶雄安,千方科技助力新區打造智慧出行樣板
對話 IEEE Fellow 俞益洲:進入深睿醫療後,我對醫學影像 AI 的新思考

TAG:雷鋒網 |