2022年最新深度學(xué)習(xí)入門指南
概述
1. 深度學(xué)習(xí)是用于處理視覺相關(guān)任務(wù)的強(qiáng)大的方法。
2. 卷積神經(jīng)網(wǎng)絡(luò)是一種深度學(xué)習(xí)模型,我們用它來處理與計(jì)算機(jī)視覺相關(guān)的應(yīng)用程序。
3. 在本指南中,我們將探索 CNN 的工作原理以及它們?nèi)绾螒?yīng)用于圖像分類任務(wù)。我們還將構(gòu)建一個(gè) CNN 模型,并使用 Keras 從頭開始在訓(xùn)練數(shù)據(jù)集上對(duì)其進(jìn)行訓(xùn)練。
介紹
我一直著迷于深度學(xué)習(xí)模型的潛力和力量,以及它們?nèi)绾卫斫鈭?zhí)行圖像分類、圖像分割、對(duì)象檢測(cè)等任務(wù)。我們還遇到了一些分割算法,例如來自 X-的腫瘤/異常檢測(cè),他們?cè)谶@方面的表現(xiàn)甚至優(yōu)于醫(yī)生。
在本指南中,我們將全面介紹 CNN 及其在圖像分類任務(wù)中的應(yīng)用。我們將首先介紹卷積神經(jīng)網(wǎng)絡(luò) (CNN) 背后的基本理論、它們的工作原理以及它們?nèi)绾纬蔀橛糜谌魏斡?jì)算機(jī)視覺任務(wù)的最流行的模型之一。
現(xiàn)在讓我們開始吧……
卷積神經(jīng)網(wǎng)絡(luò)
CNN 或卷積神經(jīng)網(wǎng)絡(luò)是將圖像作為輸入并通過使用卷積運(yùn)算學(xué)習(xí)圖像中的局部模式的算法。而密集層/全連接層則從輸入中學(xué)習(xí)全局模式。
CNN 的學(xué)習(xí)局部模式具有兩個(gè)特性:
1. CNN 學(xué)習(xí)的模式是不變的,即在學(xué)習(xí)識(shí)別圖像左下角的特定模式后,CNN 可以識(shí)別圖像中的任何位置。但是,如果密集連接的網(wǎng)絡(luò)出現(xiàn)在新位置的任何位置,則必須重新學(xué)習(xí)該模式。這使得 CNN 在處理和理解圖像時(shí)具有數(shù)據(jù)效率。
2. CNN 可以學(xué)習(xí)模式的空間層次,即第一個(gè)卷積層學(xué)習(xí)一個(gè)小的局部模式,如邊緣或線,第二個(gè)卷積層學(xué)習(xí)由第一個(gè)卷積層學(xué)習(xí)的特征組成的更大的模式,依此類推。通過這種方式,CNN 學(xué)習(xí)和理解了越來越復(fù)雜和抽象的視覺概念。
讓我們看看下面的貓圖,在這里我們可以看到,在第一個(gè)卷積層中,學(xué)習(xí)了邊緣、曲線等模式。但在第二層 CNN 中,眼睛、鼻子或耳朵等特征是通過使用第一層的模式來檢測(cè)的。通過這種方式,CNN了解圖像并了解圖像中的對(duì)象。
參考特征提取
現(xiàn)在讓我們探索并了解它是如何工作的。
卷積運(yùn)算
卷積是應(yīng)用于 3D 張量的操作,稱為特征圖。這些特征圖由兩個(gè)空間軸(高度和寬度)和一個(gè)深度軸(或通道軸)組成。
如果我們考慮 RGB 圖像的示例,高度和寬度構(gòu)成空間軸,3 個(gè)顏色通道表示深度軸。類似地,對(duì)于黑白圖像,深度為 1。但在其他層的輸出中,深度不是由顏色通道表示,而是代表過濾器。
過濾器對(duì)輸入數(shù)據(jù)的特定方面進(jìn)行編碼,即過濾器可以對(duì)“面部存在”或“汽車結(jié)構(gòu)”等概念進(jìn)行編碼。
卷積運(yùn)算由兩個(gè)關(guān)鍵參數(shù)組成,
1. 內(nèi)核大。簯(yīng)用于圖像的過濾器的大小。這些是典型的 3×3 或 5×5。
2. 輸出特征圖的深度:這是卷積計(jì)算的輸出濾波器的數(shù)量。
卷積操作只是在輸入特征圖上乘加加權(quán)濾波器,以生成另一個(gè)具有不同寬度、高度和深度的 3D 張量。卷積操作通過在 3D 輸入特征圖上滑動(dòng)這些大小為 3×3 或 5×5 過濾器的窗口,在每個(gè)可能的位置停止,然后計(jì)算特征。
我們可以在下面的 gif 中看到操作,3×3 內(nèi)核在 5×5 輸入特征圖上運(yùn)行以生成 3×3 輸出。
參考卷積
重要的是要注意網(wǎng)絡(luò)從給定數(shù)據(jù)中學(xué)習(xí)所需的最佳過濾器。CNN 模型的權(quán)重是過濾器。
現(xiàn)在讓我們看看邊框效果、填充和步幅。
了解邊框效果和填充
現(xiàn)在再次讓我們考慮 5×5 特征圖(參考上面的 gif)。過濾器的大小為 3×3,因此有 9 個(gè)圖塊。
現(xiàn)在在卷積操作期間,3×3 濾波器只能通過 5×5 特征圖 9 次,因此我們的輸出大小為 3×3。所以輸出在這里從 5×5 縮小到 3×3,也就是說,在每個(gè)維度旁邊縮小了兩個(gè)圖塊。這里沒有對(duì)輸入特征圖應(yīng)用填充,因此稱為有效填充。
如果我們希望輸出特征圖與輸入特征圖的大小相同,我們需要使用填充。填充包括在輸入特征圖的每一側(cè)添加適當(dāng)數(shù)量的行和列,以使每個(gè)輸入圖塊周圍的中心卷積窗口成為可能。這種類型的填充稱為相同的填充。以下 GIF 表示相同的填充。
源邊框效果和填充現(xiàn)在我們可以看到,當(dāng)我們向 5×5 特征圖添加額外的填充并應(yīng)用 3×3 過濾器時(shí),我們將能夠獲得與輸入特征圖大小相同的輸出特征圖。
如何找到要添加到給定過濾器大小和特征圖的填充?
當(dāng)我們遇到不同大小的特征圖和過濾器以及我們?nèi)绾未_定對(duì)于有效和相同的情況應(yīng)該使用多少填充時(shí),自然會(huì)出現(xiàn)這個(gè)問題。所以要回答這個(gè)問題,我們有確定填充的公式,即
1. 有效填充:因?yàn)橛行畛湟馕吨鴽]有填充,所以padding的數(shù)量將為0。
2. 相同填充:我們使用相同的填充來保留輸入特征圖的大小。但是卷積的輸出主要取決于過濾器的大小,與輸入大小無關(guān)。因此,可以根據(jù)過濾器大小確定填充,如下所示:
相同填充 =(過濾器大小 - 1)/ 2
現(xiàn)在讓我們看看另一個(gè)可以影響輸出大小的因素,即步幅。
了解步幅
步幅是影響輸出特征圖大小的因素之一。步幅是應(yīng)用過濾器的兩個(gè)連續(xù)窗口之間的距離。
在上面的例子中,我們已經(jīng)看到過濾器作為窗口被應(yīng)用于輸入特征圖,并被移動(dòng)一個(gè)單位或步幅。當(dāng)這種轉(zhuǎn)變大于1時(shí),我們將其定義為跨步的CNN。下面的GIF是一個(gè)大步為2的CNN的例子。
我們還可以觀察到,當(dāng)我們使用步幅的值為 2(或大于 1)時(shí),與常規(guī)卷積(當(dāng) stride 的值 = 1 時(shí))相比,輸出特征圖的大小減。ㄏ虏蓸右蜃訛 2) .
因此我們可以說使用步幅是對(duì)輸入特征圖進(jìn)行下采樣的方法之一。但它們?cè)趯?shí)踐中很少使用,但它仍然是 CNN 的重要概念之一,了解它是很好的。
現(xiàn)在在開始 CNN 的實(shí)現(xiàn)之前,讓我們看一下用于對(duì)輸入特征進(jìn)行下采樣的另一個(gè)重要概念,即池化。
理解池化
池化操作可以定義為一種通過使用不同的策略(例如取平均值、最大值、總和等)來積極減。虏蓸虞斎胩卣鲌D的大小的方法,F(xiàn)在讓我們看看不同類型的池化
1.最大池化:最大池化是一種廣泛使用的池化策略,用于對(duì)輸入特征圖進(jìn)行下采樣。在這一層中,確定大小的窗口通過輸入特征圖,然后獲得最大值并計(jì)算為下一層或輸出特征圖。
我們可以在下面的 GIF 中看到,當(dāng)我們使用過濾器大小 2 執(zhí)行最大池化時(shí),輸入特征被下采樣因子 2 或減半。
我們可以通過以下公式確定使用最大池化后輸出的大。
輸出大。捷斎氪笮。ǔ鼗^濾器大。
還有其他類型的池化策略,例如考慮窗口平均值的平均池化和考慮窗口權(quán)重總和的求和池化。
但最大池化一直是最流行和最廣泛使用的池化策略。這是因?yàn)楫?dāng)我們考慮過濾器窗口的最大值時(shí),我們將能夠?qū)⒂嘘P(guān)輸入特征/當(dāng)前特征圖的大部分可用信息轉(zhuǎn)移到下一個(gè)特征圖。因此,當(dāng)我們通過神經(jīng)網(wǎng)絡(luò)的層進(jìn)行傳播時(shí),減少了數(shù)據(jù)的丟失。
既然我們對(duì) CNN 的工作原理有了一些了解,那么現(xiàn)在讓我們從頭開始實(shí)現(xiàn)一個(gè) CNN。
從頭開始訓(xùn)練基于 CNN 的圖像分類器
現(xiàn)在讓我們?cè)?MNIST 數(shù)據(jù)集上訓(xùn)練一個(gè) CNN 模型。MNIST 數(shù)據(jù)集由 0 到 9 的手寫數(shù)字圖像組成,即 10 個(gè)類。訓(xùn)練集由 60000 張圖像組成,測(cè)試集由 10000 張圖像組成。讓我們使用 CNN 從頭開始訓(xùn)練圖像分類器。我們將在Keras框架中實(shí)現(xiàn)代碼。
Keras 是最受歡迎和使用最廣泛的深度學(xué)習(xí)庫之一。它是作為高級(jí) API 構(gòu)建的,可以輕松使用 TensorFlow。
要完成以下代碼實(shí)現(xiàn),建議使用帶有 GPU 的 Jupyter Notebook。可以通過Google Colaboratory訪問相同的內(nèi)容,該實(shí)驗(yàn)室提供基于云的 Jupyter Notebook環(huán)境和免費(fèi)的 Nvidia GPU。
現(xiàn)在讓我們開始吧
獲取 MNIST 數(shù)據(jù)集
在下載數(shù)據(jù)集之前,讓我們進(jìn)行必要的導(dǎo)入,
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical
from tensorflow.keras import layers
from tensorflow.keras import models
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import pyplot
現(xiàn)在讓我們下載數(shù)據(jù),
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
上面的代碼下載數(shù)據(jù)并緩存。由于我們正在加載預(yù)定義的數(shù)據(jù)集,因此該數(shù)據(jù)集已經(jīng)被預(yù)處理并以元組的形式打包。
現(xiàn)在讓我們探索我們解壓出來的這些張量的形狀,
int("Shape of training dataset: ",train_images.shape)
print("Shape of test dataset: ",test_images.shape)
print("Shape of training dataset labels: ",train_labels.shape)
print("Shape of test dataset labels: ",test_labels.shape)
輸出:
從上面的輸出我們可以看到,訓(xùn)練數(shù)據(jù)集有 60000 張圖片,每張圖片的大小為 28×28。同樣,測(cè)試數(shù)據(jù)集有 10000 張圖像,圖像大小為 28×28。
我們還可以看到標(biāo)簽沒有任何形狀,即它是一個(gè)標(biāo)量值。讓我們看看一些標(biāo)簽,
print(train_labels)
print(type(train_labels))
輸出:
我們可以看到標(biāo)簽都在一個(gè) NumPy 數(shù)組中。
現(xiàn)在讓我們看看我們的一些訓(xùn)練圖像,
# plot first few images
for i in range(9):
# define subplot
pyplot.subplot(330 + 1 + i)
# plot raw pixel data
pyplot.imshow(train_images[i], cmap=pyplot.get_cmap('gray'))
# show the figure
pyplot.show()
輸出:
我們可以通過繪制它們來可視化訓(xùn)練樣本。
在我們繼續(xù)模型訓(xùn)練之前,讓我們對(duì)我們的數(shù)據(jù)進(jìn)行一些預(yù)處理。
基本預(yù)處理
現(xiàn)在讓我們將圖像從 (60000, 28, 28) 重塑為 (60000, 28, 28, 1) 大小,其中最后一個(gè)維度表示圖像的深度。我們之前已經(jīng)看到,每個(gè)圖像的特征圖都有三個(gè)維度,即寬度、高度和深度。由于 MNIST 訓(xùn)練集由黑白圖像組成,我們可以將深度定義為 1。
接下來,我們應(yīng)該對(duì)數(shù)據(jù)集進(jìn)行歸一化,即將輸入的所有值都在 0 和 1 之間。由于圖像層的最大值是 255,我們將整個(gè)數(shù)據(jù)集除以 255。
train_images = train_images.reshape((60000, 28, 28, 1))
train_images = train_images.a(chǎn)stype('float32') / 255
現(xiàn)在讓我們也對(duì)測(cè)試集應(yīng)用相同的預(yù)處理。
test_images = test_images.reshape((10000, 28, 28, 1))
test_images = test_images.a(chǎn)stype('float32') / 255
最后,讓我們將標(biāo)簽轉(zhuǎn)換為分類格式,即它們目前作為標(biāo)量,但我們正在執(zhí)行 One-Hot 編碼以將每個(gè)標(biāo)量唯一地映射到向量。
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
train_labels[:10]
輸出:
我們可以看到訓(xùn)練標(biāo)簽是獨(dú)熱編碼。
現(xiàn)在讓我們使用 Keras 創(chuàng)建一個(gè)基本的 CNN 模型。
使用 Tensorflow-Keras 創(chuàng)建 CNN 模型
現(xiàn)在讓我們使用 Keras 庫創(chuàng)建一個(gè)基本模型,
model = models.Sequential()
model.a(chǎn)dd(layers.Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1)))
model.a(chǎn)dd(layers.MaxPool2D((2,2)))
model.a(chǎn)dd(layers.Conv2D(64, (3,3), activation='relu'))
model.a(chǎn)dd(layers.MaxPool2D((2,2)))
model.a(chǎn)dd(layers.Conv2D(64, (3,3), activation='relu'))
現(xiàn)在我們來分析一下上面的代碼,
· 首先,我們正在創(chuàng)建一個(gè)Sequential類型類的對(duì)象。Sequential 模型是一種模型,我們可以在其中添加和堆疊層以形成端到端模型。
· 使用**.a(chǎn)dd**我們通過根據(jù)層指定各種參數(shù)來將層添加到我們的模型中。
· 在上面的模型中,我們添加了一個(gè)卷積層(即 Keras 中的 Conv2D),它接受許多過濾器、內(nèi)核大小和激活函數(shù)作為參數(shù)。
· 接下來,添加最大池化層(即 Keras 中的 MaxPool2D)以啟用池化操作。
· Keras 中提供了不同類型的層。
模型的上述部分負(fù)責(zé)識(shí)別和檢測(cè)輸入數(shù)據(jù)中存在的模式。(我們上面討論過的工作)現(xiàn)在最后讓我們通過定義模型的輸出數(shù)量來初始化頭部。
model.a(chǎn)dd(layers.Flatten())
model.a(chǎn)dd(layers.Dense(64, activation='relu'))
model.a(chǎn)dd(layers.Dense(10, activation='softmax'))
現(xiàn)在我們的模型已經(jīng)準(zhǔn)備好了。我們可以使用**.summary()**方法查看模型中所有層的列表 。
model.summary()
輸出:
現(xiàn)在讓我們通過分配優(yōu)化器、損失函數(shù)和模型訓(xùn)練時(shí)使用的指標(biāo)來編譯模型。
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
現(xiàn)在讓我們用訓(xùn)練數(shù)據(jù)和標(biāo)簽擬合模型并訓(xùn)練 5 個(gè) epochs
model.fit(train_images, train_labels, epochs=5, batch_size=64)
結(jié)果:
從訓(xùn)練結(jié)果中我們可以看出,該模型能夠達(dá)到高達(dá) 99% 的準(zhǔn)確率,這真是令人印象深刻!
結(jié)論
我們已經(jīng)看到了卷積神經(jīng)網(wǎng)絡(luò)的底層功能以及它如何從圖像中提取特征。因此,我們可以得出結(jié)論,卷積神經(jīng)網(wǎng)絡(luò)是在計(jì)算機(jī)視覺應(yīng)用中產(chǎn)生最先進(jìn)結(jié)果的技術(shù)之一。
原文標(biāo)題 : 2022年最新深度學(xué)習(xí)入門指南

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長度6~500個(gè)字
最新活動(dòng)更多
-
3月27日立即報(bào)名>> 【工程師系列】汽車電子技術(shù)在線大會(huì)
-
4月30日立即下載>> 【村田汽車】汽車E/E架構(gòu)革新中,新智能座艙挑戰(zhàn)的解決方案
-
5月15-17日立即預(yù)約>> 【線下巡回】2025年STM32峰會(huì)
-
即日-5.15立即報(bào)名>>> 【在線會(huì)議】安森美Hyperlux™ ID系列引領(lǐng)iToF技術(shù)革新
-
5月15日立即下載>> 【白皮書】精確和高效地表征3000V/20A功率器件應(yīng)用指南
-
5月16日立即參評(píng) >> 【評(píng)選啟動(dòng)】維科杯·OFweek 2025(第十屆)人工智能行業(yè)年度評(píng)選
推薦專題
- 1 UALink規(guī)范發(fā)布:挑戰(zhàn)英偉達(dá)AI統(tǒng)治的開始
- 2 北電數(shù)智主辦酒仙橋論壇,探索AI產(chǎn)業(yè)發(fā)展新路徑
- 3 降薪、加班、裁員三重暴擊,“AI四小龍”已折戟兩家
- 4 “AI寒武紀(jì)”爆發(fā)至今,五類新物種登上歷史舞臺(tái)
- 5 國產(chǎn)智駕迎戰(zhàn)特斯拉FSD,AI含量差幾何?
- 6 光計(jì)算迎來商業(yè)化突破,但落地仍需時(shí)間
- 7 東陽光:2024年扭虧、一季度凈利大增,液冷疊加具身智能打開成長空間
- 8 地平線自動(dòng)駕駛方案解讀
- 9 封殺AI“照騙”,“淘寶們”終于不忍了?
- 10 優(yōu)必選:營收大增主靠小件,虧損繼續(xù)又逢關(guān)稅,能否乘機(jī)器人東風(fēng)翻身?