深圳專(zhuān)業(yè)做網(wǎng)站建設(shè)推廣渠道
一、認(rèn)識(shí)卷積操作
????????卷積操作是一種數(shù)學(xué)運(yùn)算,它涉及兩個(gè)函數(shù):輸入函數(shù)(通常是圖像)和卷積核(也稱(chēng)為濾波器或特征檢測(cè)器)。卷積核在輸入函數(shù)上滑動(dòng),將核中的每個(gè)元素與其覆蓋的輸入函數(shù)區(qū)域中的對(duì)應(yīng)元素相乘,然后將所有乘積相加,形成輸出函數(shù)的一個(gè)值。這個(gè)過(guò)程在整個(gè)輸入函數(shù)上重復(fù),生成一個(gè)新的二維數(shù)組,稱(chēng)為特征圖或激活圖。
????????卷積操作的主要目的是從輸入數(shù)據(jù)中提取特征。通過(guò)改變卷積核的值,可以檢測(cè)不同類(lèi)型的特征,如邊緣、角點(diǎn)、紋理等。
二、運(yùn)用卷積操作
1、卷積操作函數(shù)
????????在PyTorch中,可以使用torch.nn.functional.conv2d
函數(shù)執(zhí)行二維卷積操作。該函數(shù)的輸入包括輸入張量、卷積核、以及其他可選參數(shù),如步長(zhǎng)(stride)、填充(padding)等。
2、函數(shù)參數(shù)解釋
對(duì)常用的參數(shù)進(jìn)行一些說(shuō)明
- 輸入通道數(shù) (in_channels): 這表示輸入圖像有多少個(gè)顏色通道。例如,對(duì)于彩色圖像,通常有紅、綠、藍(lán)三個(gè)通道,所以輸入通道數(shù)就是3。
- 輸出通道數(shù) (out_channels): 這表示卷積操作后,你希望有多少個(gè)特征圖或者卷積核。每一個(gè)特征圖都可以看作是一種特征檢測(cè)器,用于檢測(cè)輸入圖像中的某種特定特征。
- 卷積核大小 (kernel_size): 這表示卷積核的尺寸。卷積核就像一個(gè)滑動(dòng)窗口,在輸入圖像上滑動(dòng),進(jìn)行像素值的加權(quán)求和。常見(jiàn)的卷積核大小有3x3、5x5等。
- 步長(zhǎng) (stride): 這表示卷積核在輸入圖像上滑動(dòng)時(shí),每次移動(dòng)的距離。步長(zhǎng)越大,輸出的特征圖尺寸就越小。
- 填充 (padding): 在輸入圖像的周?chē)砑宇~外的像素值,通常是0。填充的目的是為了控制輸出特征圖的尺寸,以及讓卷積核能夠處理到輸入圖像的邊界像素。
其他的具體參數(shù),可以查看官方文檔,里面有詳細(xì)說(shuō)明
torch.nn.functional.conv2d — PyTorch 2.3 documentationhttps://pytorch.org/docs/stable/generated/torch.nn.functional.conv2d.html#torch.nn.functional.conv2d
3、簡(jiǎn)單進(jìn)行卷積操作
常理,先進(jìn)行導(dǎo)包操作
import torch
import torch.nn.functional as F
接著定義輸入的矩陣和卷積核,輸入矩陣形狀為5*5,卷積核大小為3*3
# 輸入
input = torch.tensor([[1, 2, 0, 3, 1],[0, 1, 2, 3, 1],[1, 2, 1, 0, 0],[5, 2, 3, 1, 1],[2, 1, 0, 1, 1]])# 卷積核
kernel = torch.tensor([[1, 2, 1],[0, 1, 0],[2, 1, 0]])
?將輸入圖像和卷積核重塑為四維張量,以適應(yīng)conv2d函數(shù)的要求
input = torch.reshape(input, [1, 1, 5, 5])
kernel = torch.reshape(kernel, [1, 1, 3, 3])
輸出張量的形狀為[1, 1, 3, 3],其中第一個(gè)和第二個(gè)維度分別表示批量大小和通道數(shù)(在這個(gè)例子中都是1),第三個(gè)和第四個(gè)維度表示輸出特征圖的高和寬。
接著,執(zhí)行卷積操作
output = F.conv2d(input, kernel, stride=1, padding=0)
得出結(jié)果如下:
三、卷積函數(shù)的原理
????????這里就結(jié)合著上面的demo來(lái)講解一下,如果學(xué)過(guò)矩陣的話,這就很好理解了,在默認(rèn)步長(zhǎng)為1的情況下,由于卷積核是3*3的,那么就會(huì)在原來(lái)的輸入矩陣中,框出同樣為3*3的區(qū)域,按照矩陣中每一個(gè)位置對(duì)應(yīng)相乘,再相加,就得到卷積后3*3矩陣的第一行第一列的結(jié)果10
接下來(lái)紅色所示的框會(huì)移動(dòng),重復(fù)上述操作即可得到卷積結(jié)果
四、卷積層的工作原理
????????卷積層是卷積神經(jīng)網(wǎng)絡(luò)(CNN)中的基本組件之一。它的工作原理是通過(guò)在輸入數(shù)據(jù)上滑動(dòng)卷積核來(lái)提取特征。每個(gè)卷積核都可以學(xué)習(xí)并檢測(cè)輸入數(shù)據(jù)中的特定類(lèi)型的特征。卷積層的輸出是一個(gè)特征圖,其中每個(gè)位置的值表示該位置在輸入數(shù)據(jù)中是否存在某種特征。后期將會(huì)和Tensorboard結(jié)合使用,更加直觀地了解工作過(guò)程。