溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Python中pytorch神經(jīng)網(wǎng)絡(luò)圖像卷積運(yùn)算的示例分析

發(fā)布時(shí)間:2021-10-11 16:30:30 來(lái)源:億速云 閱讀:158 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要為大家展示了“Python中pytorch神經(jīng)網(wǎng)絡(luò)圖像卷積運(yùn)算的示例分析”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Python中pytorch神經(jīng)網(wǎng)絡(luò)圖像卷積運(yùn)算的示例分析”這篇文章吧。

互相關(guān)運(yùn)算

嚴(yán)格來(lái)說(shuō),卷積層是個(gè)錯(cuò)誤的叫法,因?yàn)樗磉_(dá)的運(yùn)算其實(shí)是互相關(guān)運(yùn)算(cross-correlation),而不是卷積運(yùn)算。在卷積層中,輸入張量和核張量通過(guò)互相關(guān)運(yùn)算產(chǎn)生輸出張量。

首先,我們暫時(shí)忽略通道(第三維)這一情況,看看如何處理二維圖像數(shù)據(jù)和隱藏表示。下圖中,輸入是高度為3、寬度為3的二維張量(即形狀為 3 × 3 3\times3 3×3)。卷積核的高度和寬度都是2。

Python中pytorch神經(jīng)網(wǎng)絡(luò)圖像卷積運(yùn)算的示例分析

注意,輸出大小略小于輸入大小。這是因?yàn)槲覀冃枰銐虻目臻g在圖像上“移動(dòng)”卷積核。稍后,我們將看到如何通過(guò)在圖像邊界周?chē)畛淞銇?lái)保證有足夠的空間移動(dòng)內(nèi)核,從而保持輸出大小不變。

def corr2d(X, K):
	"""計(jì)算?維互相關(guān)運(yùn)算。"""
	h, w = K.shape
	Y = torch.zeros((X.shape[0] - h + 1, X.shape[1] - w + 1))
	for i in range(Y.shape[0]):
		for j in range(Y.shape[1]):
			Y[i, j] = (X[i:i + h, j:j + w] * K).sum()
	return Y

卷積層

卷積層對(duì)輸入和卷積核權(quán)重進(jìn)行互相關(guān)運(yùn)算,并在添加標(biāo)量偏置之后產(chǎn)生輸出。所以,卷積層中的兩個(gè)被訓(xùn)練的參數(shù)是卷積核權(quán)重核標(biāo)量偏置。就像我們之前隨機(jī)初始化全連接層一樣,在訓(xùn)練基于卷積層的模型時(shí),我們也隨機(jī)初始化卷積核權(quán)重。

基于上面定義的corr2d函數(shù)實(shí)現(xiàn)二維卷積層。在__init__構(gòu)造函數(shù)中,將weight和bias聲明為兩個(gè)模型參數(shù)。前向傳播函數(shù)調(diào)用corr2d函數(shù)并添加偏置。

class Conv2D(nn.Module):
	def __init__(self, kernel_size):
		super().__init__()
		self.weight = nn.Parameter(torch.rand(kernel_size))
		self.bias = nn.Parameter(torch.zeros(1))

	def forward(self, x):
		return corr2d(x, self.weight) + self.bias

高度和寬度分別為 h和 w的卷積核可以被稱(chēng)為 h × w 卷積或 h × w 卷積核。我們也將帶有 h × w 卷積核的卷積層稱(chēng)為 h × w 卷積層。

特征映射

下圖中輸出的卷積層有時(shí)被稱(chēng)為特征映射(Feature Map),因?yàn)樗梢员灰暈橐粋€(gè)輸入映射到下一層的空間維度的轉(zhuǎn)換器。在CNN中,對(duì)于某一層的任意元素 x x x,其感受野(Receptive Field)是指在前向傳播期間可能影響 x x x計(jì)算的所有元素(來(lái)自所有先前層)。

Python中pytorch神經(jīng)網(wǎng)絡(luò)圖像卷積運(yùn)算的示例分析

注意,感受野的覆蓋率可能大于某層輸入的實(shí)際區(qū)域大小。

例如上圖:給定 2 × 2 卷積核,陰影輸出元素值19的接收域是陰影部分的四個(gè)元素。假設(shè)之前輸出為 Y ,其大小為 2 × 2 ,現(xiàn)在我們?cè)倨浜蟾郊右粋€(gè)卷積層,該卷積層以 Y 為輸入,輸出單個(gè)元素 z。再這種情況下, Y上的  z的接收字段包括 Y 的所有四個(gè)元素,而輸入的感受野包括最初所有九個(gè)輸入元素。
因此,當(dāng)一個(gè)特征圖中的任意元素需要檢測(cè)更廣區(qū)域的輸入特征時(shí),我們可以構(gòu)建一個(gè)更深的網(wǎng)絡(luò)。

以上是“Python中pytorch神經(jīng)網(wǎng)絡(luò)圖像卷積運(yùn)算的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI