0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于網(wǎng)絡(luò)本身即可以生成數(shù)據(jù)能力的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)了解嘛?

新機器視覺 ? 來源:新機器視覺 ? 作者:George Seif ? 2022-05-24 16:08 ? 次閱讀

生成對抗網(wǎng)絡(luò)(GANs,https://en.wikipedia.org/wiki/Generative_adversarial_network)是一類具有基于網(wǎng)絡(luò)本身即可以生成數(shù)據(jù)能力的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。由于GANs的強大能力,在深度學(xué)習(xí)領(lǐng)域里對它們的研究是一個非常熱門的話題。在過去很短的幾年里,它們已經(jīng)從產(chǎn)生模糊數(shù)字成長到創(chuàng)造如真實人像般逼真的圖像。

d70d1f78-da6f-11ec-ba43-dac502259ad0.pngd738fd28-da6f-11ec-ba43-dac502259ad0.jpg

1 GAN的工作方式


GANs屬于生成模型的一類(https://en.wikipedia.org/wiki/Generative_model)。這意味著它們能夠產(chǎn)生,或者說是生成完全新的“有效”數(shù)據(jù)。有效數(shù)據(jù)是指網(wǎng)絡(luò)的輸出結(jié)果應(yīng)該是我們認為可以接受的目標。

舉例說明,舉一個我們希望為訓(xùn)練一個圖像分類網(wǎng)絡(luò)生成一些新圖像的例子。當(dāng)然對于這樣的應(yīng)用來說,我們希望訓(xùn)練圖像越真實越好,可能在風(fēng)格上與其他圖像分類訓(xùn)練數(shù)據(jù)非常相似。

下面的圖片展示的例子是GANs已經(jīng)生成的一系列圖片。它們看起來非常真實!如果沒人告訴我們它們是計算機生成的,我們真可能認為它們是人工搜集的。

d759a5dc-da6f-11ec-ba43-dac502259ad0.jpg

漸進式GAN生成的圖像示例(圖源:https://arxiv.org/pdf/1710.10196.pdf)

為了做到這些,GANs是以兩個獨立的對抗網(wǎng)絡(luò)組成:生成器和判別器。當(dāng)僅將嘈雜的圖像陣列作為輸入時,會對生成器進行訓(xùn)練以創(chuàng)建逼真的圖像。別器經(jīng)過訓(xùn)練可以對圖像是否真實進行分類。

GANs真正的能力來源于它們遵循的對抗訓(xùn)練模式。生成器的權(quán)重是基于判別器的損失所學(xué)習(xí)到的。因此,生成器被它生成的圖像所推動著進行訓(xùn)練,很難知道生成的圖像是真的還是假的。同時,生成的圖像看起來越來越真實,判別器在分辨圖像真實與否的能力變得越來越強,無論圖像用肉眼看起來多么的相似。

從技術(shù)的角度來看,判別器的損失即是分類圖像是真是假的錯誤值;我們正在測量它區(qū)分真假圖像的能力。生成器的損失將取決于它在用假圖像“愚弄”判別器的能力,即判別器僅對假圖像的分類錯誤,因為生成器希望該值越高越好。

因此,GANs建立了一種反饋回路,其中生成器幫助訓(xùn)練判別器,而判別器又幫助訓(xùn)練生成器。它們同時變得更強。下面的圖表有助于說明這一點。

d78eb3bc-da6f-11ec-ba43-dac502259ad0.png

生成對抗網(wǎng)絡(luò)的結(jié)構(gòu)說明

2在PyTorch中訓(xùn)練GAN來生成數(shù)字


現(xiàn)在我們將通過一個例子來展示如何使用PyTorch建立和訓(xùn)練我們自己的GAN!MNIST數(shù)據(jù)集包含60000個訓(xùn)練數(shù)據(jù),數(shù)據(jù)是像素尺寸28x28的1-9的黑白數(shù)字圖片。這個數(shù)據(jù)集非常適合我們的用例,同時也是非常普遍的用于機器學(xué)習(xí)的概念驗證以及一個非常完備的集合。

d7af8042-da6f-11ec-ba43-dac502259ad0.jpg

MNIST 數(shù)據(jù)部分集,圖源:https://www.researchgate.net/figure/A-subset-of-the-MNIST-database-of-handwritten-digits_fig4_232650721

我們將從import開始,所需的僅僅是PyTorch中的東西。


												
import torch    from torch import nn, optim    from torch.autograd.variable import Variable
import torchvision    import torchvision.transforms as transforms

接下來,我們?yōu)橛?xùn)練數(shù)據(jù)準備DataLoader。請記住,我們想要的是為MNIST生成隨機數(shù)字,即從0到9。因此,我也將需要為這10個數(shù)字建立標簽。

d7d65f1e-da6f-11ec-ba43-dac502259ad0.png

現(xiàn)在我們可以開始建立網(wǎng)絡(luò)了,從下面的Discriminator(判別器)網(wǎng)絡(luò)開始,回想一下,判別器網(wǎng)絡(luò)是對圖像真實與否進行分類——它是一個圖像分類網(wǎng)絡(luò)。因此,我們的輸入是符合標準MNIST大小的圖像:28x28像素。我們把這張圖像展平成一個長度為784的。輸出是一個單獨的值,表示圖像是否是實際的MNIST數(shù)字。

d7ef1df6-da6f-11ec-ba43-dac502259ad0.png

接下來到了生成器部分。生成器網(wǎng)絡(luò)負責(zé)創(chuàng)建實際的圖像——它可以從一個純噪聲的輸入做到這一點!在這個例子中,我們要讓生成器從一個長度為100的開始——注意:這只是純隨機噪聲。從這個,我們的生成器將輸出一個長度為784的,稍后我們可以將其重塑為標準MNIST的28x28像素。

d8125726-da6f-11ec-ba43-dac502259ad0.png

為了建立訓(xùn)練過程,我們將需要做以下工作:
  • 1 . 損失函數(shù)
  • 2 . 每個網(wǎng)絡(luò)的優(yōu)化器
  • 3 . 訓(xùn)練次數(shù)
  • 4 . batch數(shù)量
如果我們希望網(wǎng)絡(luò)在GPU上執(zhí)行,PyTorch要求我們必須明確地把模型移動到GPU上。這部分所有的代碼如下所示。d8632ae8-da6f-11ec-ba43-dac502259ad0.png現(xiàn)在開始訓(xùn)練循環(huán)。PyTorch中的訓(xùn)練循環(huán)通常由一個遍歷各個訓(xùn)練周期的外部循環(huán)和一個遍歷batch數(shù)據(jù)的內(nèi)部循環(huán)組成。訓(xùn)練GAN的關(guān)鍵是我們需要在一個循環(huán)中更新生成器和判別器。查看下面的代碼來訓(xùn)練GAN和PyTorch。這些步驟在代碼下面有更詳細的描述。d891088c-da6f-11ec-ba43-dac502259ad0.pngd8ca7144-da6f-11ec-ba43-dac502259ad0.png(1)我們首先為判別器準備 *real* 圖像數(shù)據(jù)。輸入的是一批真實的MNIST圖像。輸出全為1的,因為1表示圖像是真實的。

(2)接下來,我們將為生成器準備輸入量以便生成假圖像。回想一下,我們的生成器網(wǎng)絡(luò)采用長度為100的輸入向量,這就是我們在這里所創(chuàng)建的向量。images.size(0)用于批處理大小。

(3)通過從步驟(2)中創(chuàng)建的隨機噪聲數(shù)據(jù)向量,我們可以繞過這個向量到生成器來生成假的圖像數(shù)據(jù)。這將結(jié)合我們從步驟1的實際數(shù)據(jù)來訓(xùn)練判別器。請注意,這次我們的標簽向量全為0,因為0代表假圖像的類標簽。

(4)通過假的和真的圖像以及它們的標簽,我們可以訓(xùn)練我們的判別器進行分類??倱p失將是假圖像的損失+真圖像的損失。

(5)現(xiàn)在我們的判別器已經(jīng)更新,我們可以用它來進行預(yù)測。這些預(yù)測的損失將通過生成器反向傳播,這樣生成器的權(quán)重將根據(jù)它欺騙判別器的程度進行具體更新

(5a)生成一些假圖像進行預(yù)測

(5b)使用判別器對假圖像進行分批次預(yù)測并保存輸出。

(6)使用判別器的預(yù)測訓(xùn)練生成器。注意,我們使用全為1的 _real_labels_ 作為目標,因為我們的生成器的目標是創(chuàng)建看起來真實的圖像并且預(yù)測為1!因此,生成器的損失為0將意味著判別器預(yù)測全1.

瞧,這就是我們訓(xùn)練GAN生成MNIST圖像的全部代碼!只需要安裝PyTorch即可運行。下面的gif就是經(jīng)過超過40個訓(xùn)練周期生成的圖像。

d8e2dd60-da6f-11ec-ba43-dac502259ad0.gif

d94503b4-da6f-11ec-ba43-dac502259ad0.png

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    42

    文章

    4776

    瀏覽量

    100952
  • 圖像
    +關(guān)注

    關(guān)注

    2

    文章

    1088

    瀏覽量

    40515
  • 生成器
    +關(guān)注

    關(guān)注

    7

    文章

    317

    瀏覽量

    21061

原文標題:你真的了解深度學(xué)習(xí)生成對抗網(wǎng)絡(luò)(GAN)嗎?

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    神經(jīng)網(wǎng)絡(luò)三層結(jié)構(gòu)的作用是什么

    神經(jīng)網(wǎng)絡(luò)是一種受人腦啟發(fā)的計算模型,能夠模擬人腦神經(jīng)元網(wǎng)絡(luò)的工作原理。神經(jīng)網(wǎng)絡(luò)由多個層次的神經(jīng)元組成,每個神經(jīng)
    的頭像 發(fā)表于 07-11 11:03 ?1009次閱讀

    遞歸神經(jīng)網(wǎng)絡(luò)和循環(huán)神經(jīng)網(wǎng)絡(luò)的模型結(jié)構(gòu)

    遞歸神經(jīng)網(wǎng)絡(luò)是一種旨在處理分層結(jié)構(gòu)神經(jīng)網(wǎng)絡(luò),使其特別適合涉及樹狀或嵌套數(shù)據(jù)的任務(wù)。這些網(wǎng)絡(luò)明確地模擬了層次
    的頭像 發(fā)表于 07-10 17:21 ?699次閱讀
    遞歸<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>和循環(huán)<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的模型<b class='flag-5'>結(jié)構(gòu)</b>

    遞歸神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)形式主要分為

    遞歸神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Networks,簡稱RNN)是一種具有時間序列處理能力神經(jīng)網(wǎng)絡(luò),其結(jié)構(gòu)形式多樣,可以根據(jù)
    的頭像 發(fā)表于 07-05 09:32 ?584次閱讀

    遞歸神經(jīng)網(wǎng)絡(luò)與循環(huán)神經(jīng)網(wǎng)絡(luò)一樣嗎

    遞歸神經(jīng)網(wǎng)絡(luò)(Recursive Neural Network,RvNN)和循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)是兩種不同類型的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),它們在處理序列
    的頭像 發(fā)表于 07-05 09:28 ?943次閱讀

    人工神經(jīng)網(wǎng)絡(luò)模型的分類有哪些

    詳細介紹人工神經(jīng)網(wǎng)絡(luò)的分類,包括前饋神經(jīng)網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò)、循環(huán)神經(jīng)網(wǎng)絡(luò)、深度神經(jīng)網(wǎng)絡(luò)生成對抗
    的頭像 發(fā)表于 07-05 09:13 ?1295次閱讀

    循環(huán)神經(jīng)網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)的區(qū)別

    。它們在處理不同類型的數(shù)據(jù)和解決不同問題時具有各自的優(yōu)勢和特點。本文將從多個方面比較循環(huán)神經(jīng)網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)的區(qū)別。 基本概念 循環(huán)神經(jīng)網(wǎng)絡(luò)是一種具有循環(huán)連接的
    的頭像 發(fā)表于 07-04 14:24 ?1400次閱讀

    循環(huán)神經(jīng)網(wǎng)絡(luò)和遞歸神經(jīng)網(wǎng)絡(luò)的區(qū)別

    循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,簡稱RNN)和遞歸神經(jīng)網(wǎng)絡(luò)(Recursive Neural Network,簡稱RvNN)是深度學(xué)習(xí)中兩種重要的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。它們在
    的頭像 發(fā)表于 07-04 14:19 ?961次閱讀

    深度神經(jīng)網(wǎng)絡(luò)與基本神經(jīng)網(wǎng)絡(luò)的區(qū)別

    在探討深度神經(jīng)網(wǎng)絡(luò)(Deep Neural Networks, DNNs)與基本神經(jīng)網(wǎng)絡(luò)(通常指傳統(tǒng)神經(jīng)網(wǎng)絡(luò)或前向神經(jīng)網(wǎng)絡(luò))的區(qū)別時,我們需要從多個維度進行深入分析。這些維度包括
    的頭像 發(fā)表于 07-04 13:20 ?999次閱讀

    bp神經(jīng)網(wǎng)絡(luò)算法過程包括

    的算法過程,包括網(wǎng)絡(luò)結(jié)構(gòu)、激活函數(shù)、訓(xùn)練過程、反向傳播算法、權(quán)重更新策略等。 網(wǎng)絡(luò)結(jié)構(gòu) BP神經(jīng)網(wǎng)絡(luò)由輸入層、隱藏層和輸出層組成,每層包含若干神經(jīng)元。輸入層的
    的頭像 發(fā)表于 07-04 09:45 ?514次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)與循環(huán)神經(jīng)網(wǎng)絡(luò)的區(qū)別

    網(wǎng)絡(luò)結(jié)構(gòu),分別適用于不同的應(yīng)用場景。本文將從基本概念、結(jié)構(gòu)組成、工作原理及應(yīng)用領(lǐng)域等方面對這兩種神經(jīng)網(wǎng)絡(luò)進行深入解讀。
    的頭像 發(fā)表于 07-03 16:12 ?3567次閱讀

    BP神經(jīng)網(wǎng)絡(luò)算法的基本流程包括

    、自然語言處理等。本文將詳細介紹BP神經(jīng)網(wǎng)絡(luò)算法的基本流程,包括網(wǎng)絡(luò)結(jié)構(gòu)、激活函數(shù)、前向傳播、反向傳播、權(quán)重更新和訓(xùn)練過程等。 網(wǎng)絡(luò)結(jié)構(gòu) BP神經(jīng)網(wǎng)絡(luò)由輸入層、隱藏層和輸出層組成。輸入
    的頭像 發(fā)表于 07-03 09:52 ?549次閱讀

    神經(jīng)網(wǎng)絡(luò)算法的結(jié)構(gòu)有哪些類型

    : 多層感知器(MLP) 多層感知器是最基本和最簡單的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),它由輸入層、隱藏層和輸出層組成。每個神經(jīng)元都通過權(quán)重和偏置與前一層的神經(jīng)元相連,并使用激活函數(shù)進行非線性轉(zhuǎn)換。MLP可以
    的頭像 發(fā)表于 07-03 09:50 ?489次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)和bp神經(jīng)網(wǎng)絡(luò)的區(qū)別

    不同的神經(jīng)網(wǎng)絡(luò)模型,它們在結(jié)構(gòu)、原理、應(yīng)用等方面都存在一定的差異。本文將從多個方面對這兩種神經(jīng)網(wǎng)絡(luò)進行詳細的比較和分析。 引言 神經(jīng)網(wǎng)絡(luò)是一種模擬人腦
    的頭像 發(fā)表于 07-02 14:24 ?4493次閱讀

    神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)類型和應(yīng)用實例

    神經(jīng)網(wǎng)絡(luò)模型,作為深度學(xué)習(xí)領(lǐng)域的核心組成部分,近年來在圖像識別、自然語言處理、語音識別等多個領(lǐng)域取得了顯著進展。本文旨在深入解讀神經(jīng)網(wǎng)絡(luò)的基本原理、結(jié)構(gòu)類型、訓(xùn)練過程以及應(yīng)用實例,為初學(xué)者提供一份詳盡的入門指南。
    的頭像 發(fā)表于 07-02 11:33 ?495次閱讀

    神經(jīng)網(wǎng)絡(luò)架構(gòu)有哪些

    神經(jīng)網(wǎng)絡(luò)架構(gòu)是機器學(xué)習(xí)領(lǐng)域中的核心組成部分,它們模仿了生物神經(jīng)網(wǎng)絡(luò)的運作方式,通過復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu)實現(xiàn)信息的處理、存儲和傳遞。隨著深度學(xué)習(xí)技術(shù)的不斷發(fā)展,各種神經(jīng)網(wǎng)絡(luò)架構(gòu)被提出并廣泛應(yīng)用
    的頭像 發(fā)表于 07-01 14:16 ?800次閱讀