一文看懂卷積神經網絡CNN的核心

在之前,我總結了關于計算機神經網絡與梯度下降的核心,詳見下文鏈接 :
一文看懂計算機神經網絡與梯度下降
本文主要會對圖像相關的機器學習中最為重要的網絡,卷積神經網絡作個人的理解分析。

1. 為什么要使用卷積神經網絡

在講述原理之前,我們先來解釋為什么我們在圖像及視頻等等領域的機器學習中要使用CNN。我們都知道,使用多層感知器,有隱藏層的深度神經網絡可以幫助我們解決分類,聚合,回歸問題。但當我們的輸入輸出轉變為高維度的數據,例如圖片時,不可避免地要面臨神經元過多,參數量過大的問題。假設我們使用一張720*480的圖片作為輸入,一張圖片對應的參數量就已經達到了345600個,如果我們單純地將數據壓為一維向量并繼續使用全連接的神經網絡,那不可避免的會極大增加運算成本,降低模型的效率,顯然是不科學的。同樣的,對于圖像而言,如果說像素點的灰度值或RGB值可以對應我們在一維數據中使用的數值,那么圖像的空間性在我們將其轉變為一維后實際上是被拋棄了,這會導致我們忽略了圖像局部形態所包含的信息,使得一些非常輕微的平移旋轉對結果產生翻天覆地的變化,這是我們不能容忍的。對于我們來說,兩個圖片中不同位置的物體所包含的含義應當是一致的,即只應當考慮圖片的相對位置而非絕對位置。
在接下來的部分,我會著重闡述卷積神經網絡的原理,其中包含一些個人的看法理解。

2. 圖像處理中的卷積核

要想理解卷積神經網絡的運作,首先必須理解圖像處理中卷積的含義。需要注意的是,雖然卷積神經網絡中有卷積二字,但是其實他與傳統意義上數學定義的卷積是有區別的。更為準確的叫法應當稱之為協相關神經網絡,而非卷積神經網絡。如下圖所示,我們以一個常見的3*3的卷積核為例,目標像素點對應的值由其周圍對應的原像素點和卷積核計算協相關得來。
在這里插入圖片描述
由上圖我們不難發現,經過卷積后的目標圖像中的每一個像素點都對應了原圖像中的局部特征,使用不同的卷積核,就可以從原圖像中提取出不一樣的局部特征了。計算目標圖像的方式,是將卷積核在原圖像上滑動,與各個部分的圖像分別計算卷積直到遍歷全部的原圖像。
hn(i,j)=(hn?1?ωk)(i,j)=∑n=?d?12d?12∑m=?d?12d?12hn?1(i+n,j+m)?ω(n,m)h^n(i,j) = (h^{n-1}*\omega_k)(i,j) = \sum^{\frac{d-1}{2}}_{n=-\frac{d-1}{2}}\sum^{\frac{d-1}{2}}_{m=-\frac{d-1}{2}}h^{n-1}(i+n,j+m) * \omega(n,m)hn(i,j)=(hn?1?ωk?)(i,j)=n=?2d?1?2d?1??m=?2d?1?2d?1??hn?1(i+n,j+m)?ω(n,m)
上式就是圖像處理中使用卷積核進行卷積運算的數學定義,其中 hnh^nhn 是計算得出的目標圖像,hn?1h^{n-1}hn?1 對應原圖像, ω\omegaω 就是用于計算的卷積核, ddd 是卷積核的大小。

更多有關圖像處理中卷積的基礎,可以參考以下鏈接中的文章 :
數字圖像處理中濾波和卷積操作詳細說明

3. 卷積神經網絡原理

在理解了卷積神經網絡中"卷積"的運算方式,我們接下來就來看看卷積神經網絡的計算原理。輸入輸出的維度在理解卷積神經網絡的過程中至關重要。

我們日常生活中常處理的圖像按照他們的通道區分往往可以分為兩大類,單通道的灰度圖像以及三通道的RGB圖像。下圖就給出了一個針對三通道RGB圖像的單層卷積神經網絡的運算,我們就以下圖為例,來理解卷積神經網絡中隱藏層各個神經元以及權重的計算。首先,輸入是28?28?328*28*328?28?3的RGB圖,其中3分別代表RGB三個通道。我們這里只使用了一個5?55*55?5的卷積核。我們對每一個通道分別計算卷積,并將結果相加,就得到了一個包含24?2424*2424?24個神經元的隱藏層。需要注意的是,每一個得出的隱藏層都共用一個卷積核中的權重,例如下圖中,隱藏層h1nh^n_1h1n? 共用同一個權重矩陣(卷積核) ω1n\omega^n_1ω1n?。通過這樣的操作,我們就提取出了由這個卷積核描述的特征。

在這里插入圖片描述
接著,如果我們使用不止一個卷積核,那顯而易見的,就可以提取出圖像中不同的特征了。因此,計算得出的隱藏層的層數,與選擇使用的卷積核的個數是一致的。
在這里插入圖片描述
綜上所述,我們可以通過不同的卷積核來提取出圖像中的不同特征。而我們使用卷積神經網絡的過程,實際上是通過訓練來確定各個卷積核的權重,從而提取出最適合的圖像特征。使用不同長度大小的卷積核,在訓練卷積神經網絡的過程中,可以幫助我們提取出最優的特征來組成feature maps。之后再結合全連接神經網絡來完成相關的圖像分類聚合問題。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/386795.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/386795.shtml
英文地址,請注明出處:http://en.pswp.cn/news/386795.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[LeetCode] Two Sum

一刷&#xff1a; import java.util.Arrays;public class Solution1 { public int[] twoSum(int[] nums, int target) {int[] indexnew int[2];int sum0;for (int i 0; i < nums.length; i) {for (int j i1; j < nums.length; j) {sumnums[i]nums[j];index[0] i;index[…

docker 安裝 oracle 11g

1.準備docker環境&#xff1b; 2. docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g --pull 鏡像&#xff08;6個多G&#xff09; 3.docker run -d -p 1521:1521 -v /data/oracle:/data/oracle --name oracle11 registry.cn-hangzhou.aliyuncs.com/helowin…

機器學習理論梳理2 : KNN K近鄰分類模型

本文主要梳理KNN&#xff0c;K近鄰模型的基本原理。 從機器學習的大分類來看&#xff0c;K近鄰模型屬于監督學習中的一種判別式模型&#xff0c;常用于分類問題。初始的數據集中&#xff0c;包含了已經分類標簽好的數據。一句話來說&#xff0c;K近鄰模型就是通過計算實例與現…

docker安裝配置gitlab詳細過程

1、方法一 1 docker pull beginor/gitlab-ce:11.0.1-ce.0 2、方法二 如果服務器網路不好或者pull不下來鏡像&#xff0c;只能在其它網路比較好的機器上pull下來鏡像&#xff0c;導出成一個文件&#xff0c; 再下載上傳到網路不好的機器上&#xff0c;然后再從文件中導出來&am…

集合對偶律:分別用圖文證明

集合幾個法則&#xff1a; 求證&#xff1a; 注&#xff1a;右上角C表示此集合的補集/余集 語言描述&#xff1a;A 并 B的補集 A的補集 交 B的補集 A交B的補集 A的補集 并 B的補集 文字證明&#xff1a;&#xff08;思路&#xff1a;證明兩個集合相等&#xff0c;可證兩集合…

keras實現嘴唇圖像autoencoder

本文分享了我在silent speech 項目過程中實現的基于嘴唇圖像數據集的autoencoder自編碼器。輸入輸出都是64?6464*6464?64的嘴唇灰度圖。自編碼器由編碼解碼兩個部分構成&#xff0c;同時實現了利用checkpoint在每個epoch運算時&#xff0c;自動保存測試集loss更小的模型。 數…

遠程導表

exp ibmscm1/ibmscM123112.35.32.77:1532/JD3 file/home/scmimp.dmp tablesS4I_BPM.ACT_DE_MODEL url: jdbc:oracle:thin:112.35.32.77:1532:JD3 username: ibmscm1 password: ibmscM123 exp ibmscm1/ imp/exp user/pwd//host:port/sid fileurl exp 用戶名/密碼數據庫…

historyReverser array reverse

historyReverser & array reverse "use strict";/**** author xgqfrms* license MIT* copyright xgqfrms** description historyReverser* augments Reverse 逆向 / Recursive 遞歸* example* link**/const historyReverser (datas [], text , debug false)…

pip國內加載速度慢解決方法

在國內使用pip安裝包時有時會發現安裝速度非常慢&#xff0c;甚至連接不上源。 為了加快pip的下載速度&#xff0c;我們可以主動使用 -i命令來切換到國內源。 下面放出實測好用的國內源 : 清華&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple 阿里云&#xff1a;http:…

oracle--導出、導入blob類型的字段

oracle--導出、導入blob類型的字段 blob是oracle中的一個數據類型&#xff0c;保存的是壓縮后的二進制形式的大數據。 數據遷移如果涉及到blob字段&#xff0c;都不好處理&#xff0c;因為無法用常規方法進行操作&#xff0c;如&#xff1a;使用select查看該字段&#xff0c;…

Feign Hystrix (HystrixCommonKey) 設置單獨接口的超時時間和FallBack

Feign設置單獨接口的超時時間和FallBack(HystrixCommonKey) HystrixCommonKey生成方法&#xff1a;類名#方法名(入參類型) final class Default implements SetterFactory { Override public HystrixCommand.Setter create(Target<?> target, Method method…

深度學習分布式訓練小結

分布式訓練本質上是為了加快模型的訓練速度&#xff0c;面對較為復雜的深度學習模型以及大量的數據。單機單GPU很難在有限的時間內達成模型的收斂。這時候就需要用到分布式訓練。 分布式訓練又分為模型并行和數據并行兩大類。 1. 數據并行 數據并行在于將不同batch的數據分別…

scrapy框架的理解

在每一次學習一個新東西之前&#xff0c;需要知道的幾個問題。這個東西是什么(what),怎么使用(how)&#xff0c;為什么(why) scrapy的概念&#xff1a;Scrapy是一個為了爬取網站數據&#xff0c;提取結構性數據而編寫的框架。 scrapy的作用&#xff1a;通過少量代碼實現快速抓取…

MAC配置JCO,與找不到sapjco3異常

①到jco官網下載jco壓縮包&#xff0c;解壓 ②把libsapjco3.jnilib 放到一個文件夾中 把該路徑配置到環境變量中 ③項目運行有可能會出現異常&#xff1a;找不到 sapjco3 &#xff1b; 第一種解決方式&#xff1a;配置虛擬機參數&#xff1a;-Djava.library.path之前環境變量路…

You must install pydot and graphviz for plotmodel to work報錯如何處理

本文主要記錄windows-anaconda環境下關于使用tensorflow.keras.utils.plot_model()方法時提示安裝pydot 和 graphviz的解決方法。 pydot的安裝非常簡單&#xff0c;進入anaconda python環境中&#xff0c;用pip進行安裝就可以了。 graphviz包的安裝就要稍顯復雜一些。 首先我們…

Java高并發之BlockingQueue

前言碎語 當系統流量負載比較高時&#xff0c;業務日志的寫入操作也要納入系統性能考量之內&#xff0c;如若處理不當&#xff0c;將影響系統的正常業務操作&#xff0c;之前寫過一篇《spring boot通過MQ消費log4j2的日志》的博文&#xff0c;采用了RabbitMQ消息中間件來存儲抗…

python中文字符串轉list

本文主要記錄了將中文字符串轉換為list的過程&#xff0c;其中我們使用了keras preprocessing中的text_to_word_sequence方法。這個方法是完全適配中文的。需要注意的是&#xff0c;中文語料一般字符之間是沒有空格分割的&#xff0c;這與英文是不同的。如下所示&#xff0c;如…

IP通信基礎回顧2(第三周)

1.TCP報文 序號字段占4個字節。TCP連接中傳送的數據流中每一個字節都編上一個序號。序號字段的值則是本報文段所發送的數據第一個字節的序號。 確認序號占4個字節。是期望收到的對方的下一個報文段字節胡序號。首部長度占4個字節。指出TCP首部長度在20-60字節之間&#xff0c;所…

ThreadPoolExecutor線程池 + Queue隊列

1&#xff1a;BlockingQueue繼承關系 java.util.concurrent 包里的 BlockingQueue是一個接口&#xff0c; 繼承Queue接口&#xff0c;Queue接口繼承 Collection BlockingQueue----->Queue-->Collection 圖&#xff1a; 隊列的特點是&#xff1a;先進先出&#xff08;FIFO…

python list pop方法

通過使用pop方法可以直接刪除列表中的某一個對應元素并返回該元素值 s [a, b, c, d] # 通過使用pop方法可以移除list中的一個元素并返回它的值 result s.pop(1) print(result) print(s)結果如下 b [a, c, d]