主頁 >  其他 > 通過 “貓片” 認識生成對抗網路思想(Make Your First GAN With PyTorch 第五章)

通過 “貓片” 認識生成對抗網路思想(Make Your First GAN With PyTorch 第五章)

2021-11-10 10:15:22 其他

  • 本文是 Make Your First GAN With PyTorch 的第 5 章,本書的介紹詳見這篇文章,

本文目錄

  • 1.如何生成影像?
  • 2.對抗性訓練(Adversarial Training)
  • 3.訓練 GAN
    • 3.1 ☆☆☆步驟一☆☆☆
    • 3.2 ☆☆☆步驟二☆☆☆
    • 3.3 ☆☆☆步驟三☆☆☆
  • 4. GAN 并不容易被訓練
  • 5. 學習要點


在探索生成對抗網路(GAN)前,先設定一些場景進行基礎的認識,

1.如何生成影像?

一般而言,使用神經網路是為了約簡、凝練、總結資訊,比如 MNIST 分類器 是一個很好的例子,網路有 784 個輸入,輸出 10 個值,輸出比輸入的數量少很多,

在這里插入圖片描述
下面來完成一個思想實驗,如果將這些網路從前到后反轉,將完成約簡的相反作業,也就是擴展少量資料到大量資料,在這種情況下,將能生成影像,

事實上,如果將上面訓練好的網路反向,將代表數字的向量輸入,可以產生 28??28 的影像:

在這里插入圖片描述

但是上述程序創建的影像有如下特點(或者叫問題):

  • 給定的輸入,輸出的影像總是相同的;
  • 輸出影像是對應標簽所有訓練影像的某種平均,(看上圖似乎像 3 又不完全是 3

考慮上面的問題,其實使用網路來生成影像的想法很好,但是理想的網路應能夠:

  • 創建的影像不能完全一致;
  • 生成的影像應該 “更真實”,而不是訓練影像的平均值,

這兩個問題對生成真實和有用的影像很重要,簡單的網路反向方法并不能解決這些挑戰,需要一種新的網路架構,

2.對抗性訓練(Adversarial Training)

2014 年,Ian Goodfellow 提出了一種不同型別的網路架構,該網路架構并沒有更復雜,也沒有使用更花哨的激活函式或更高級的優化技術;但是,這個網路的架構完全不同,

下面一步步進行解釋,

下圖顯示了對影像進行 非貓 分類的神經網路:

在這里插入圖片描述
如果輸入到網路的影像是一只貓,則輸出值應為 1,代表 True;如果影像不是貓,則輸出為 0,代表 False

  • 上圖這個架構與之前 MNIST 例子區別不大,唯一的區別是分類輸出值是單獨一個值,而不是 10 個,

對任務作出一點小改變,改變分類器試圖分辨 非貓 的情況,制作一個分類器來分辨 真實貓 的圖片和自己畫的 假貓 的圖片(下圖所示):

在這里插入圖片描述

  • 看起來這個架構并沒有什么值得注意的變化,輸入仍然有兩種影像,且神經網路分類器可以訓練來分類這兩類,

可以將這個分類器看作一個 偵探(detective),在進行訓練前,這個偵探并不擅長分辨 真貓假貓;隨著訓練的開展,偵探將逐漸擅長從 真貓 中分辨 假貓

下面,假設有一個能生成 假貓 圖片的生成器:

在這里插入圖片描述
這省了準備各種 假貓 圖片,而是使用代碼生成它們,

其實,生成一點都不像貓的垃圾影像很容易,比如我們可以簡單地畫出隨機的三角形,

但是,我們不滿足于一個只能生成垃圾影像的生成器,假設有一個神經網路,可以通過訓練來產生相對真實的影像,將這個神經網路稱之為 生成器(generator),同時,稱分類器為 鑒別器(discriminator),這是類似網路中的公認名稱,

在這里插入圖片描述
下面考慮如何訓練這個 生成器,所謂訓練,是關于獎勵哪種行為,懲罰哪種行為的作業,這也是損失函式完成的作業:

  • 如果生成器生成了能 通過 鑒別器的影像,我們就 獎勵 它;
  • 如果生成器生成的影像 未能 通過鑒別器,我們就 懲罰 它,

先不考慮損失函式,回過頭看一下整體考慮,下面略微有點繞,需要認真閱讀,

  • 鑒別器 的作業是分辨真實影像和生成的影像,如果 生成器 并不太好,這項作業將很簡單,
  • 但是如果訓練 生成器(先不管怎么訓練)效果很好,可以使得影像看起來越來越真實,
  • 另一方面,如果 鑒別器 隨著訓練變得越來越好,為了能夠更有效地 “騙過” 鑒別器生成器 必須也變得越來越好,
  • 最后的結果,就是 生成器 可以變得擅長創造影像,使得生成的影像不能被 鑒別器 所區分,
  • 鑒別器生成器 設定為彼此競爭,作為 對手(adversaries),每個都試圖超過另一個,隨著這個程序,鑒別器生成器 都變得越來越好,這個架構稱之為 對抗生成網路(Generative Adversarial Network) ,或簡稱為 GAN

這是一個聰明的架構,并不僅僅因為它使用了競爭來驅動改進,而且因為 不需要 定義詳細的規則來描述損失函式中的真實影像,

機器學習的歷史已經表明,我們并 不善于 定義這些規則,取而代之的是讓 GAN 自主學習真實影像是什么,

上面所描述的是真正令人興奮的,世界領先的機器學習研究者之一 Yann LeCun對抗式學習(adversarial training)“過去二十年機器學習中最酷的想法”

3.訓練 GAN

在一個 GAN 中,生成器鑒別器 都需要訓練,而且,不要 先訓練一個,之后然后再訓練另一個,而是期望 生成器鑒別器 能同時學習,

下面的三步訓練回圈是完成這個的一個方法:

  • 第一步:鑒別器 展示一個真實的影像,然后,告訴 鑒別器 ,這個樣本的分類應該是 1
  • 第二步:鑒別器 展示一個 生成器 的輸出,然后,告訴 鑒別器 ,這個樣本的分類應該是 0
  • 第三步:鑒別器 展示一個 生成器 的輸出,然后,告訴 生成器 ,這個樣本的分類應該是 1

上面三個步驟是絕大多數 GAN 訓練方案的核心,可能很難理解,下面通過一些圖片解釋這些步驟的含義,

  • 下面的介紹中,鑒別器生成器 都加粗,需要認真注意,避免混淆,

3.1 ☆☆☆步驟一☆☆☆

在這里插入圖片描述
步驟一 是最簡單的,主要是向 鑒別器 展示一個來自真實資料集的影像,請求它對樣本影像進行分類(輸出 0 或者 1),

由于這里的 預期輸出 應該是 1,所以,我們可以使用 損失值來更新 鑒別器

3.2 ☆☆☆步驟二☆☆☆

在這里插入圖片描述
步驟二 同樣是對 鑒別器 進行訓練,

但這次是由 鑒別器 對一個來自 生成器 的影像進行分類(輸出 0 或者 1),

由于這時 鑒別器預期輸出 應該是 0,所以也可以使用 損失值 來更新 鑒別器

  • 這里操作必須很小心, 不要在這步更新 生成器,因為我們并不想在 生成器 生成的虛假影像被 鑒別器 查獲假的影像時,仍給 生成器 獎勵,
  • 下面對 GAN 編程時,將展示如何防止通過計算圖回傳更新 生成器

3.3 ☆☆☆步驟三☆☆☆

在這里插入圖片描述
步驟三 是對 生成器 進行訓練,

使用 生成器 來產生 虛假影像,用于展示給 鑒別器 來分類(輸出 0 或者 1),

這時 鑒別器 的期望輸出應該是 1,也就是我們希望 生成器 能夠生成足夠迷惑 鑒別器 的影像,

步驟二 的區別在于,這里的 損失值 僅僅用來更新 生成器,而并不想在 鑒別器 分類錯誤時卻仍然鼓勵它,所以這一步并不更新鑒別器

  • 前面幾個步驟看起來很復雜,但只要結合示意圖認真理解,后面對 GAN 編程時, 將看到操作起來很簡單,

4. GAN 并不容易被訓練

上面剛討論了 GAN 的訓練框架,但實際上訓練 GAN 可能很困難,

由于生成器和鑒別器在訓練時 相互對抗,如果它們平衡的很好,那么它們將互相改進并不難;但如果鑒別器變好的太快,生成器可能永遠跟不上;相反的,如果鑒別器學習的太慢,生成器將由于劣質的影像而得到獎勵(訓練效果同樣不好),

  • 其實, GAN 是機器學習中一個新想法,目前對如何使得它更好作業的理解還處在初級階段,這經常導致訓練網路失敗,
  • 當然,先將 GAN 可能失效的理論討論放到一邊,首先開始構建 GAN ,當各種問題在訓練中浮現時,我們再探索它,

5. 學習要點

  • 分類(Classification) 是資料的約簡,分類神經網路會把很多輸入值減少 到一個數量少很多的輸出值,每個輸出值對應一類;
  • 生成(Generation) 一般是資料的擴展,生成神經網路會將少數的輸入 種子(seed) 值擴展到數量多很多的輸出值(比如影像的像素值);
  • 生成對抗網路(GAN) 有兩個神經網路:一個 生成器(generator) 和一個 鑒別器(discriminator);兩個網路相互競爭,稱為 對手(adversaries)鑒別器 通過將訓練集里面的資料分類為 真實(real),將生成器產生的資料分類為 虛假(fake) 而得到訓練;生成器 則通過創建看起來足夠真的資料,使得資料騙過鑒別器而得到訓練;
  • 可靠地設計和訓練 GAN 成功很難,GAN 是新的技術,而且形容它如何 作業、為何會訓練失敗的理論目前還不成熟;
  • 標準的 GAN 訓練回圈有 3 個步驟: 使用真實的資料樣本訓練鑒別器; 使用生成的資料樣本訓練鑒別器; 通過鑒別器將生成器生成的影像識別為真的影像,來訓練生成器,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/354786.html

標籤:其他

上一篇:OpenCV 繪制形狀與文字

下一篇:使用Azure認知服務快速搭建一個目標檢測平臺

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more