動手學深度學習 5 3 多輸入通道和多輸出通道

2021-10-08 19:35:18 字數 4247 閱讀 6704

前面兩節裡我們用到的輸入和輸出都是二維陣列,但真實資料的維度經常更高。例如,彩色影象在高和寬2個維度外還有rgb(紅、綠、藍)3個顏色通道。假設彩色影象的高和寬分別是

hh h(1

×1+2

×2+4

×3+5

×4)+

(0×0

+1×1

+3×2

+4×3

)=56

。圖5.4 含2個輸入通道的互相關計算

接下來我們實現含多個輸入通道的互相關運算。我們只需要對每個通道做互相關運算,然後通過add_n函式來進行累加。

import torch

from torch import nn

import sys

".."

)import d2lzh_pytorch as d2l

def

corr2d_multi_in

(x, k)

:# 沿著x和k的第0維(通道維)分別計算再相加

res = d2l.corr2d(x[0,

:,:]

, k[0,

:,:]

)for i in

range(1

, x.shape[0]

):res += d2l.corr2d(x[i,:,

:], k[i,:,

:])return rescopy to clipboard

error

copied

我們可以構造圖5.4中的輸入陣列x、核陣列k來驗證互相關運算的輸出。

x = torch.tensor([[

[0,1

,2],

[3,4

,5],

[6,7

,8]]

,[[1

,2,3

],[4

,5,6

],[7

,8,9

]]])

k = torch.tensor([[

[0,1

],[2

,3]]

,[[1

,2],

[3,4

]]])

corr2d_multi_in(x, k)

copy to clipboard

error

copied

輸出:

tensor([[ 56.,  72.],

[104., 120.]])

copy to clipboard

error

copied

當輸入通道有多個時,因為我們對各個通道的結果做了累加,所以不論輸入通道數是多少,輸出通道數總是為1。設卷積核輸入通道數和輸出通道數分別為ci

ci c_ico

​×ci

​×kh

​×kw

​。在做互相關運算時,每個輸出通道上的結果由卷積核在該輸出通道上的核陣列與整個輸入陣列計算而來。

下面我們實現乙個互相關運算函式來計算多個通道的輸出。

def

corr2d_multi_in_out

(x, k)

:# 對k的第0維遍歷,每次同輸入x做互相關計算。所有結果使用stack函式合併在一起

return torch.stack(

[corr2d_multi_in(x, k)

for k in k]

)copy to clipboard

error

copied

我們將核陣列kk+1k中每個元素加一)和k+2鏈結在一起來構造乙個輸出通道數為3的卷積核。

k = torch.stack(

[k, k +

1, k +2]

)k.shape # torch.size([3, 2, 2, 2])

copy to clipboard

error

copied

下面我們對輸入陣列x與核陣列k做互相關運算。此時的輸出含有3個通道。其中第乙個通道的結果與之前輸入陣列x與多輸入通道、單輸出通道核的計算結果一致。

corr2d_multi_in_out(x, k)copy to clipboard

error

copied

輸出:

tensor([[[ 56.,  72.],

[104., 120.]],

[[ 76., 100.],

[148., 172.]],

[[ 96., 128.],

[192., 224.]]])

copy to clipboard

error

copied

最後我們討論卷積視窗形狀為1×

1" role="presentation" style="position: relative;">1×1

1×11

×1(k

h=kw

=1" role="presentation" style="position: relative;">kh=

kw=1

kh=k

w=1k

h​=k

w​=1

)的多通道卷積層。我們通常稱之為1×

1" role="presentation" style="position: relative;">1×1

1×11

×1卷積層,並將其中的卷積運算稱為1×

1" role="presentation" style="position: relative;">1×1

1×11

×1卷積。因為使用了最小視窗,1×

1" role="presentation" style="position: relative;">1×1

1×11

×1卷積失去了卷積層可以識別高和寬維度上相鄰元素構成的模式的功能。實際上,1×

1" role="presentation" style="position: relative;">1×1

1×11

×1卷積的主要計算發生在通道維上。圖5.5展示了使用輸入通道數為3、輸出通道數為2的1×

1" role="presentation" style="position: relative;">1×1

1×11

×1卷積核的互相關計算。值得注意的是,輸入和輸出具有相同的高和寬。輸出中的每個元素來自輸入中在高和寬上相同位置的元素在不同通道之間的按權重累加。假設我們將通道維當作特徵維,將高和寬維度上的元素當成資料樣本,那麼1×

1" role="presentation" style="position: relative;">1×1

1×11

×1卷積層的作用與全連線層等價。

下面我們使用全連線層中的矩陣乘法來實現1×

11×1 1\times 11×

1卷積時,以上函式與之前實現的互相關運算函式corr2d_multi_in_out等價。

x = torch.rand(3,

3,3)

k = torch.rand(2,

3,1,

1)

y1 = corr2d_multi_in_out_1x1(x, k)

y2 = corr2d_multi_in_out(x, k)

(y1 - y2)

.norm(

).item(

)<1e-

6copy to clipboard

error

copied

輸出:

truecopy to clipboard

error

copied

在之後的模型裡我們將會看到1×

11×1 1\times 11×

1卷積層通常用來調整網路層之間的通道數,並控制模型複雜度。

注:除**外本節與原書此節基本相同,原書傳送門

動手學深度學習

線性回歸的基本要素 模型 為了簡單起見,這裡我們假設 只取決於房屋狀況的兩個因素,即面積 平方公尺 和房齡 年 接下來我們希望探索 與這兩個因素的具體關係。線性回歸假設輸出與各個輸入之間是線性關係 price warea area wage age b price warea area wage a...

動手學深度學習(一)

其中 w1 和 w2 是權重 weight b 是偏差 bias 且均為標量。訓練資料 損失函式 通常,我們用訓練資料集中所有樣本誤差的平均來衡量模型 的質量 w 1,w 2,b 為使訓練樣本平均損失最小的解 優化演算法 b 代表每個小批量中的樣本個數 批量大小,batch size 稱作學習率 l...

筆記 動手學深度學習

在求數值解的優化演算法中,小批量隨機梯度下降 mini batch stochastic gradient descent 在深度學習中被廣泛使用。它的演算法很簡單 先選取一組模型引數的初始值,如隨機選取 接下來對引數進行多次迭代,使每次迭代都可能降低損失函式的值。在每次迭代中,先隨機均勻取樣乙個由...