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

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

為了鑒別世界名畫,我死磕CNN后終于搭建了自己的模型

2020-11-03 17:13 作者:圖靈社區(qū)  | 我要投稿


各位看官想必對大名鼎鼎的 “卷積神經(jīng)網(wǎng)絡(luò)”(CNN)一定不陌生。在《用Python實(shí)現(xiàn)深度學(xué)習(xí)框架》的第8章中,我們用自己實(shí)現(xiàn)的框架 MatrixSlow 搭建卷積神經(jīng)網(wǎng)絡(luò)并將其用于實(shí)際問題。

在講到 CNN 的原理時(shí),我們從“可訓(xùn)練的濾波器”這個(gè)角度切入講解 CNN 的動機(jī)和能力之源。

本文挑選了本章中一個(gè)很有意思的小例子,那就是用計(jì)算圖的自動求導(dǎo)訓(xùn)練一個(gè)Sobel 邊緣查找濾波器。下面讓我們從一個(gè)有趣的問題開始吧!

假設(shè)你接到了這樣一個(gè)圖像分類任務(wù):分辨蒙德里安和羅斯科的作品。?

先來介紹一下這兩位畫家:彼埃·蒙德里安(Piet Cornelies Mondrian,1872—1944),荷蘭畫家,風(fēng)格派運(yùn)動和非具象繪畫的創(chuàng)始者之一;馬克·羅斯科(Mark Rothko,1903—1970),美國畫家,抽象派運(yùn)動領(lǐng)袖之一。

然后再來看看他們的作品,哪怕是一個(gè)藝術(shù)外行(比如作者本人),相信在看了若干作品之后,也能準(zhǔn)確地分開這兩位畫家??墒?,若要你通過編寫程序來分類這兩位畫家的作品,該怎么辦?讀者可以自己先想一想。

圖1 蒙德里安(左)與羅斯科(右)的作品

下面我們提一個(gè)思路,因?yàn)榻?jīng)過觀察發(fā)現(xiàn),在蒙德里安的作品中,色塊之間有清晰明顯的邊緣,而羅斯科的作品中則缺乏這樣的邊緣。

因此,如果有一種方法能夠識別畫面中的邊緣,并將其體現(xiàn)在數(shù)值上:緣較多較明顯則得到一個(gè)較大的數(shù)值,邊緣較少較模糊則得到一個(gè)較小的數(shù)值那么,我們只要將這兩類圖畫在邊緣上的顯著區(qū)別量化為數(shù)值,并以此為依據(jù),就可以分開這兩位畫家的作品了。

?PhotoShop?打開一幅蒙德里安的作品,在菜單欄中依次找到 “濾鏡—>風(fēng)格化—>查找邊緣”。應(yīng)用之后,其畫作中區(qū)域之間的邊緣以黑色凸顯出來,而大面積的單色區(qū)域則呈白色,如圖2所示。

圖2蒙德里安的作品查找邊緣后的結(jié)果

再來試試羅斯科的作品,如下圖。我們可以看到,其作品中的邊緣相對較少。

圖3羅斯科的作品查找邊緣后的結(jié)果


在數(shù)字圖像中,數(shù)值越大代表灰度值越高,越接近白色;反之,數(shù)值越小代表灰度值越低,越接近黑色。查找邊緣后的圖,邊緣部分呈黑色,非邊緣部分呈白色。

多邊緣圖和少邊緣圖的灰度值在統(tǒng)計(jì)上是有區(qū)分度的,因此可以憑借這個(gè)區(qū)分開多邊緣圖和少邊緣圖,即區(qū)分開蒙德里安和羅斯科的作品。但我們首先需要知道查找邊緣做了什么。

為了簡單起見,我們先只考慮單通道圖像,其寬和高分別記作 w 和 h,則單通道圖像就是一個(gè)矩陣。其灰度值是之間的整數(shù),我們將它除以255,使之歸一化到0和1之間。

于是,一幅圖像就變成了一個(gè)元素值是0到1之間的實(shí)數(shù)、形狀為的矩陣。現(xiàn)在,我們先構(gòu)造一個(gè)小矩陣,形狀為,元素值為:

?表1


然后用這個(gè)小矩陣對圖像做這樣的計(jì)算:將小矩陣的中心位置對準(zhǔn)圖像中的某個(gè)位置,這時(shí)小矩陣的9個(gè)位置就分別對應(yīng)上了圖像中該位置及其周圍的8個(gè)位置。

如果該位置位于圖像的邊緣,則小矩陣的某些位置就有可能會超出圖像邊緣,落在圖像之外,這時(shí)默認(rèn)它們對著的值是0。

然后,將圖像上被小矩陣“蓋”住的各位置以小矩陣對應(yīng)位置的值為權(quán)重做加權(quán)求和,得到一個(gè)值,該過程如圖4所示。

圖4 加權(quán)求和?


接下來,我們從圖像的左上角開始按行掃描,依次對圖像中的每個(gè)位置執(zhí)行上述計(jì)算。

最終,圖像有多少元素就可以計(jì)算出多少輸出值。輸出值排列成與原圖像形狀相同的矩陣,其元素值可能會超出0到1的范圍,這種計(jì)算稱為離散卷積(discrete convolution)或?yàn)V波(filtering)。其中,小矩陣稱為濾波器(filter)。

用濾波器對原圖像進(jìn)行濾波,會得到一幅輸出圖像,如圖5所示。表1中的小矩陣叫作縱向索貝爾濾波器(sobel filter),除此之外,還有其他的濾波器,它們的形狀和元素值不同,功能也不同。

圖5濾波

用縱向索貝爾濾波器對蒙德里安的作品做濾波,得到的結(jié)果如圖6所示??梢钥吹?,畫作中非邊緣的區(qū)域是大面積的灰色,縱向的邊緣呈現(xiàn)更淺的白色或更深的黑色,對應(yīng)著更大或更小的灰度值。換句話說,縱向索貝爾濾波器找到了蒙德里安作品中縱向的邊緣。

圖6縱向索貝爾濾波器濾波蒙德里安的作品之后的結(jié)果

我們來解釋一下為什么會得到上述結(jié)果,觀察表1,會發(fā)現(xiàn)其中左列值較大:1、2、1,中列值均為0,右列值較?。?1、-2、-1。若濾波器的中心對準(zhǔn)的是圖像中某個(gè)非邊緣的位置,則該位置左側(cè)和右側(cè)的灰度值差異很小,左側(cè)三個(gè)位置分別乘上1、2、1,右側(cè)三個(gè)位置分別乘上-1、-2、-1,兩者相加之后會互相抵消,從而得到一個(gè)接近于0的結(jié)果,這就是圖6中大片的灰色像素。

而對于圖像中處于縱向邊緣上的位置,其左側(cè)和右側(cè)的灰度值差異則較大。當(dāng)兩側(cè)分別乘上互為相反數(shù)的兩列權(quán)值再相加后,就會得到絕對值較大的正值或負(fù)值,所以輸出圖像在該位置上也會得到絕對值較大的正值或負(fù)值,這就是圖6中較白或較黑的像素。

縱向索貝爾濾波器就這樣找到了原圖像中的縱向邊緣。類似地,還有橫向索貝爾濾波器,如表2所示。?

表2


實(shí)際上,橫向索貝爾濾波器是縱向索貝爾濾波器的轉(zhuǎn)置。基于同樣的原理,它能查找出圖像中的橫向邊緣。我們再拓展一下,索貝爾濾波器以較大的絕對值標(biāo)識邊緣。

若將值取平方,則以較大的正值標(biāo)識邊緣。取兩種索貝爾濾波器的平方和,則能查找出圖像中的全部邊緣。橫向索貝爾濾波器查找橫向邊緣的結(jié)果如圖7所示。

圖7橫向索貝爾濾波器濾波蒙德里安的作品之后的結(jié)果


回到蒙德里安與羅斯科的問題。用兩種索貝爾濾波器先對兩幅畫作濾波,蒙德里安的畫邊緣清晰且多,輸出圖像中會有不少較大的絕對值;羅斯科的畫邊緣模糊且少,輸出中不會有太多較大的絕對值。

把兩種濾波器的輸出圖像展開并連接成一個(gè)向量,這個(gè)向量對于兩位畫家的作品是有區(qū)別的。以這個(gè)向量作為輸入,送給邏輯回歸模型或多層全連接神經(jīng)網(wǎng)絡(luò),再經(jīng)過訓(xùn)練也許能分開兩位畫家的作品。整個(gè)網(wǎng)絡(luò)的結(jié)構(gòu)如圖8所示:

圖8蒙德里安與羅斯科的作品分類網(wǎng)絡(luò)


圖8中的網(wǎng)絡(luò)就是一個(gè)簡單的卷積神經(jīng)網(wǎng)絡(luò)。為什么叫卷積呢?因?yàn)闉V波器執(zhí)行的計(jì)算在數(shù)學(xué)上叫離散卷積。

前面對于蒙德里安與羅斯科問題,我們采用的是人腦建模,其目的是闡述濾波器在這個(gè)模型中的作用。之所以選擇索貝爾濾波器,是因?yàn)榻?jīng)過觀察發(fā)現(xiàn),蒙德里安與羅斯科的畫作在是否存在邊緣的問題上差別很大。

于是先選用索貝爾濾波器提取邊緣,再將濾波輸出并展開成向量后提交給傳統(tǒng)的分類模型,比如邏輯回歸模型。

在這里,索貝爾濾波器起到了從圖像中提取特征的作用。但是對于其他的圖像分類問題:比如貓與狗、交通工具、手寫數(shù)字等,僅僅用查找邊緣就夠了么??

顯然不夠,其實(shí)除了索貝爾,還有許多其他功能各異的濾波器。我們可以把它們?nèi)蒙?,然后將結(jié)果送給分類器。但是且慢,計(jì)算圖的優(yōu)勢就是可訓(xùn)練。

濾波無非是對圖像的一種計(jì)算,那么何不將它實(shí)現(xiàn)為計(jì)算圖節(jié)點(diǎn),然后靠訓(xùn)練來幫我們找到一個(gè)合適的濾波器呢?我們常聽說卷積神經(jīng)網(wǎng)絡(luò)能“自動發(fā)現(xiàn)”特征,其實(shí)就是指將作為特征提取器的濾波器納入訓(xùn)練,然后由訓(xùn)練自動找到合適的濾波器。

我們在 MatrixSlow 中實(shí)現(xiàn)一類卷積節(jié)點(diǎn),請見代碼(matrixslow/ops/ops.py)。運(yùn)用該節(jié)點(diǎn)類時(shí),將圖像放在一個(gè)變量節(jié)點(diǎn)中,將濾波器放在另一個(gè)變量節(jié)點(diǎn)中,然后以它們?yōu)楦腹?jié)點(diǎn)構(gòu)造 Convolve 類節(jié)點(diǎn)。

在該節(jié)點(diǎn)上調(diào)用?forward?方法,節(jié)點(diǎn)的?value?屬性就是濾波結(jié)果。我們來看一個(gè)例子,請見代碼(example/ch08/sobel.py)。這個(gè)小例子計(jì)算了輸入圖像的橫向和縱向索貝爾濾波,最后將原圖、平方和、縱向索貝爾濾波和橫向索貝爾濾波的結(jié)果都顯示出來,如圖9所示。

由該圖可見,原圖中兩側(cè)灰度值差異較大的邊緣被明顯地勾畫了出來,有些邊緣不明顯是因?yàn)槠鋬蓚?cè)的灰度值差異較小。

圖9原圖(左上)、索貝爾濾波器及其平方和(右上)、縱向(左下)與橫向(右下)

濾波器屬于計(jì)算圖中的一個(gè)變量節(jié)點(diǎn),變量節(jié)點(diǎn)都可以被訓(xùn)練,因此濾波器也可以被訓(xùn)練。

我們接下來嘗試訓(xùn)練一個(gè)縱向索貝爾濾波器,我們以被訓(xùn)練濾波器的輸出與真正索貝爾濾波器的輸出的均方誤差作為訓(xùn)練的損失,若均方誤差越小則表示兩個(gè)輸出越接近。

以均方誤差為損失能否把隨機(jī)初始化的濾波器訓(xùn)練成縱向索貝爾濾波器呢?我們馬上來試一試。首先,搭建計(jì)算圖,如圖10所示。

圖10 ?訓(xùn)練濾波器的計(jì)算圖

這個(gè)例子同樣也能展現(xiàn)計(jì)算圖的靈活性,請看代碼(example/ch08/sobel_train.py)。

在上述代碼中,我們首先讀取圖像并歸一化。然后構(gòu)造一個(gè)變量節(jié)點(diǎn)?sobel,不需要初始化也不參加訓(xùn)練。它被賦以表1中的縱向索貝爾濾波器。img?是形狀為(w, h)的變量節(jié)點(diǎn),用來保存蒙德里安的畫作。

以?img?節(jié)點(diǎn)和?sobel?節(jié)點(diǎn)為父節(jié)點(diǎn)構(gòu)造 Convolve 類節(jié)點(diǎn)?sobel_output,它就是對蒙德里安的作品施加縱向索貝爾濾波器的結(jié)果。

filter_train?是一個(gè)的變量節(jié)點(diǎn),用來保存被訓(xùn)練的濾波器,需要初始化且參加訓(xùn)練。以?img?節(jié)點(diǎn)和?filter_train?節(jié)點(diǎn)為父節(jié)點(diǎn)構(gòu)造 Convolve 類節(jié)點(diǎn)filter_output,就是經(jīng)被訓(xùn)練的濾波器濾波的蒙德里安的作品。

接下來有一些小花招。minus?節(jié)點(diǎn)是一個(gè)變量節(jié)點(diǎn),不需要初始化且不參加訓(xùn)練,它被賦值為與原圖像同形狀、所有元素都為-1的矩陣,這是因?yàn)?MatrixSlow 框架只有矩陣加法節(jié)點(diǎn),需要這個(gè)-1常量矩陣幫助做減法。

n?是的變量節(jié)點(diǎn),不需要初始化且不參加訓(xùn)練,它被賦值為原圖的像素?cái)?shù)的倒數(shù),求均方誤差時(shí)要用到它。?

?filter_output?節(jié)點(diǎn)與?minus?節(jié)點(diǎn)相乘,再加到?sobel_output?節(jié)點(diǎn)上得到?error?節(jié)點(diǎn),就是縱向索貝爾濾波器與被訓(xùn)練濾波器的輸出之差。

之后,先將?error?節(jié)點(diǎn)展開為行向量,再乘上由它展開成的列向量,結(jié)果就是誤差向量與其自身的內(nèi)積(矩陣),即誤差平方和,然后將它保存在square_error?節(jié)點(diǎn),將該節(jié)點(diǎn)與n節(jié)點(diǎn)相乘得到的?mse?節(jié)點(diǎn),即為均方誤差(mean square error)。

?mse?節(jié)點(diǎn)為目標(biāo)節(jié)點(diǎn)構(gòu)造優(yōu)化器,學(xué)習(xí)率為 0.01。訓(xùn)練500個(gè)迭代,每個(gè)迭代都調(diào)用優(yōu)化器的?one_step?方法執(zhí)行前向和反向傳播;調(diào)用?update?方法更新被訓(xùn)練濾波器的值。打印出迭代數(shù)和當(dāng)前損失值,就可以看到損失值的下降。訓(xùn)練結(jié)束后,我們看一下?filter_train?節(jié)點(diǎn)的值:

很明顯,被訓(xùn)練的濾波器已經(jīng)很接近縱向索貝爾濾波器了(注意科學(xué)記數(shù)法的冪)。濾波器可以訓(xùn)練,因?yàn)樵谟?jì)算圖中它只是一個(gè)變量節(jié)點(diǎn)而已。

令圖8中的濾波器不再是事先設(shè)置好的縱向和橫向索貝爾濾波器,而是兩個(gè)或者更多可訓(xùn)練的濾波器,將它們的輸出圖像展開并連接在一起,然后送給邏輯回歸或多層全連接神經(jīng)網(wǎng)絡(luò),就是卷積神經(jīng)網(wǎng)絡(luò)。

卷積神經(jīng)網(wǎng)絡(luò)的本質(zhì)就是對圖像使用多個(gè)濾波器,這些濾波器根據(jù)損失受到訓(xùn)練,從而起到從圖像中提取特征的作用。后續(xù)的網(wǎng)絡(luò)則負(fù)責(zé)依據(jù)這些特征做分類或其他任務(wù)。

索貝爾濾波器或其他濾波器是人為設(shè)計(jì)的濾波器,因此人們知道它們具有什么功能,提取圖像的什么特征,人們運(yùn)用它們提取特征并為后續(xù)的模型而服務(wù)。

而卷積神經(jīng)網(wǎng)絡(luò)則是根據(jù)問題的本身來訓(xùn)練濾波器,有些時(shí)候,人們能夠理解這些被訓(xùn)練出來的濾波器的功能(其中有的就是索貝爾),但是在大多數(shù)時(shí)候人們并不能理解它們的作用和功能,但它們對當(dāng)前的問題就是(也許)有用。這就是連接主義人工智能的神秘之處。?

張覺非,陳震 | 著

本書特色:

  • 大咖推薦:復(fù)旦大學(xué)計(jì)算機(jī)學(xué)院教授邱錫鵬、一流科技創(chuàng)始人兼CEO袁進(jìn)輝(@老師木)、格靈深瞳創(chuàng)始人兼CEO趙勇、奇虎360集團(tuán)副總裁鄧亞峰聯(lián)合推薦

  • 干貨滿滿:從零開始用Python實(shí)現(xiàn)自己的深度學(xué)習(xí)框架,搭建從邏輯回歸到卷積神經(jīng)網(wǎng)絡(luò)的各類模型和網(wǎng)絡(luò),涵蓋模型的訓(xùn)練、評估、保存與部署等工程問題

  • 聚焦實(shí)戰(zhàn):360智能工程部高級機(jī)器學(xué)習(xí)算法工程師傾力打造

內(nèi)容簡介:

本書帶領(lǐng)讀者用原生Python語言和Numpy線性代數(shù)庫實(shí)現(xiàn)一個(gè)基于計(jì)算圖的深度學(xué)習(xí)框架MatrixSlow(類似簡易版的PyTorch、TensorFlow或Caffe)。全書分為三個(gè)部分。

第一部分是原理篇,實(shí)現(xiàn)了MatrixSlow框架的核心基礎(chǔ)設(shè)施,并基于此講解了機(jī)器學(xué)習(xí)與深度學(xué)習(xí)的概念和原理,比如模型、計(jì)算圖、訓(xùn)練、梯度下降法及其各種變體。

第二部分是模型篇,介紹了多種具有代表性的模型,包括邏輯回歸、多層全連接神經(jīng)網(wǎng)絡(luò)、因子分解機(jī)、Wide & Deep、DeepFM、循環(huán)神經(jīng)網(wǎng)絡(luò)以及卷積神經(jīng)網(wǎng)絡(luò),這部分除了著重介紹這些模型的原理、結(jié)構(gòu)以及它們之間的聯(lián)系外,還用MatrixSlow框架搭建并訓(xùn)練它們以解決實(shí)際問題。

第三部分是工程篇,討論了一些與深度學(xué)習(xí)框架相關(guān)的工程問題,內(nèi)容涉及訓(xùn)練與評估,模型的保存、導(dǎo)入和服務(wù)部署,分布式訓(xùn)練,等等。




為了鑒別世界名畫,我死磕CNN后終于搭建了自己的模型的評論 (共 條)

分享到微博請遵守國家法律
石河子市| 丘北县| 刚察县| 泰顺县| 措勤县| 泽库县| 新安县| 商河县| 闻喜县| 当雄县| 樟树市| 左云县| 元阳县| 平原县| 河津市| 大田县| 石林| 枝江市| 大连市| 依安县| 吴旗县| 韶山市| 澜沧| 武清区| 光山县| 永登县| 霍山县| 金沙县| 台安县| 谷城县| 康乐县| 漠河县| 溆浦县| 格尔木市| 永泰县| 英山县| 岐山县| 手游| 桐城市| 宁国市| 长岛县|