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

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

Keras深度學習實戰(zhàn)——DeepDream模型詳解

2022-08-24 16:38 作者:AI精品課程搬運工  | 我要投稿

0. 前言

在《對抗樣本生成》一節(jié)中,我們通過略微修改輸入圖像的像素值以改變模型對圖像類別的預測。在本節(jié)中,我們同樣對輸入圖像略微進行一些修改,但并不以改變圖像的標簽為目標,本節(jié)的目標是令修改后的圖像比原始圖像更具藝術感,而且能夠幫助我們理解卷積神經(jīng)網(wǎng)絡背后的機制。同時,本節(jié)所介紹算法也是我們之后將要介紹的神經(jīng)風格遷移技術的核心。


1. DeepDream 的技術原理

首先,我們先了解 DeepDream 的技術原理。在圖像識別相關博文中,我們學習了如何利用卷積神經(jīng)網(wǎng)絡進行圖像識別,利用若干卷積操作處理輸入圖像,輸入圖像類別標簽。在模型訓練階段,使用大量訓練圖像計算梯度信息,網(wǎng)絡根據(jù)梯度信息調整和學習最佳參數(shù)。

在《對抗攻擊》中,我們知道,如果想讓一張圖像被判斷為某一指定類別,可以將輸出概率作為優(yōu)化目標,不斷調整輸入圖像的像素值,讓指定類別的輸出概率盡可能大。類似的,假設我們想知道神經(jīng)網(wǎng)絡中間的卷積層究竟學到了什么,只需要最大化卷積層某一通道的輸出,由于在大多數(shù)卷積層中都包含多個通道,因此卷積的一個通道就可以代表一種學習到的“信息”。以某個通道的值作為優(yōu)化目標,就可以明白這個通道究竟學習到了什么,這也就是 DeepDream 的基本原理。

我們通過預訓練的模型傳遞圖像,并使用我們希望獲得激活的神經(jīng)網(wǎng)絡層。神經(jīng)網(wǎng)絡會調整輸入像素值,直到令所選網(wǎng)絡層的激活值最大。同時,我們還需要確保激活的最大值不超過設定的閾值,因為我們不希望生成的圖像與原始圖像有巨大差異。


2. DeepDream 模型分析

對 DeepDream 有了簡單的了解后,接下來,我們制定實現(xiàn) DeepDream 算法的策略:


選擇需要最大化激活的神經(jīng)網(wǎng)絡層,并給這些網(wǎng)絡層分配更大的權重以增加它們在總損失中的比重

提取給定神經(jīng)網(wǎng)絡層得到的圖像特征,并計算每一層的損失值:

當該層中圖像輸出的平方和最高時,該圖像在該層的激活值最大

提取輸入像素值相對于損失的梯度變化

根據(jù)提取的梯度變化更新輸入圖像像素值

為更新的輸入圖像像素值計算所有選定網(wǎng)絡層上的損失值,即網(wǎng)絡層激活值的平方和

如果損失值大于預定義的閾值,則停止更新圖像

3. DeepDream 算法實現(xiàn)

在本節(jié)中,我們使用 keras 實現(xiàn) DeepDream 算法,生成更具藝術風格的圖像。


3.1 數(shù)據(jù)加載與預處理

導入相關的庫,并加載圖片:

同樣與對抗樣本生成一樣,如果使用?TensorFlow2?作為?Keras?的后端,需要在代碼開頭加上以下代碼,切換梯度求解的執(zhí)行模型:

定義圖像預處理函數(shù),以便隨后可以將其傳遞給?VGG19?模型:

構建一個對處理后的圖像進行逆操作的函數(shù),以進行可視化:

使用以上預處理函數(shù)?preprocess_image,預處理圖像,并加載預訓練的?VGG19?模型:

3.2 DeepDream 生成模型

定義用于總損失值計算的神經(jīng)網(wǎng)絡層,使用第?2?個和第?5?個池化層用于總損失的計算,并為它們分配權重,使不同層將對總損失值具有不同貢獻,可以使用其他的網(wǎng)絡層和權重組合,生成不同圖片:

初始化損失函數(shù)以及模型中各個網(wǎng)絡層的字典:

計算激活的總損失值,遍歷選定用于計算激活的網(wǎng)絡層 (layer_contributions),并記錄分配給每個網(wǎng)絡層的權重 (coeff)。另外,我們計算選定神經(jīng)網(wǎng)絡層的輸出 (activation),并在縮放后使用激活值的平方和來更新?lián)p失值:

初始化梯度值,使用?K.gradients?方法可以用于計算損失相對于輸入?dream?的梯度變化:

標準化梯度值,以使梯度的變化更加平緩:

創(chuàng)建函數(shù),將輸入圖像?dream?映射到損失值和損失值相對于輸入像素值的梯度變化:


定義函數(shù)?eval_loss_and_grads,使用?fetch_loss_and_grads?函數(shù)計算輸入圖像的損失和梯度變化,并返回:


多次迭代計算的損失和梯度變化更新原始圖像,我們循環(huán)遍歷圖像?100?次,首先定義更改學習率以及最大的損失上限,即圖像修改的上限:


接下來,計算圖像的損失和梯度變化值,如果損失值大于定義的閾值,則停止修改圖像:


基于梯度變化修改圖像,并對圖像進行逆向處理并進行可視化:


代碼生成的最終圖像如下所示:


從上圖可以看到,圖像中的包含波浪形的模式,這些模式是由于令各個網(wǎng)絡層的激活最大化的結果。

小結

DeepDream 利用訓練完成的深度卷積神經(jīng)網(wǎng)絡,僅需要優(yōu)化模型卷積層某個通道的激活值即可生成令人印象深刻的圖像。本節(jié)首先介紹了 DeepDream 的基本原理,并使用 Keras 實現(xiàn)了 DeepDream 生成模型,不僅能夠生成富有藝術感的圖像,同時加深對卷積神經(jīng)網(wǎng)絡的背后運行機制的理解。

這里給大家準備了一些我精心挑選的AI的學習資料。關注VX公眾H【咕泡AI】回復【333】即可領取!

①10G教學視頻包(附課件+代碼)

②AI人工智能:54份行業(yè)重磅報告匯總

③能寫進簡歷的企業(yè)級項目實戰(zhàn)。

④100篇+深度學習論文合集

⑤人工智能必讀書籍

⑥專屬學習路徑規(guī)劃

⑦不定期大神直播,學習和困惑解答

⑧拿來就能跑通的論文復現(xiàn)代碼講解及數(shù)據(jù)集

這些資料都比較珍貴,但是對自我的職業(yè)發(fā)展價值則是無價的!

別慌,這些資料這一次全部免費分享給大家。覺得好,就不要吝嗇你的三連哦,這樣我才有動力持續(xù)更新哦? ??


Keras深度學習實戰(zhàn)——DeepDream模型詳解的評論 (共 條)

分享到微博請遵守國家法律
嘉峪关市| 梁平县| 嘉黎县| 黄冈市| 稷山县| 华宁县| 稻城县| 武汉市| 蓬莱市| 司法| 安多县| 洪雅县| 广州市| 周口市| 武城县| 西乌珠穆沁旗| 金堂县| 全州县| 乐平市| 万全县| 潞西市| 蓬莱市| 新化县| 吴江市| 德钦县| 同心县| 许昌市| 务川| 弋阳县| 定结县| 连云港市| 平罗县| 嘉定区| 怀集县| 西青区| 临武县| 台中市| 滨海县| 佛山市| 武邑县| 大余县|