kernel size為1的卷積核與全連線層的關係

2021-10-06 18:48:04 字數 1384 閱讀 2135

看到有文章說kernel_size為1的卷積相當於全連線層的運算,這裡簡單地使用1維的卷積核證明一下

輸入的資料用x∈r

(d,n

)x \in \mathbb^

x∈r(d,

n)表示,共有n

nn個資料,每個資料是d

dd維。

全連線層用l∈r

(d,d

)l \in \mathbb^

l∈r(d,

d)表示,一維的卷積用c∈r

(d,d

)c \in \mathbb^

c∈r(d,

d)表示,即卷積的in_channel=d, out_channel=d,c

cc的行向量可以看做是乙個輸出的out_channel為1卷積核c

ic_i

ci​。

使用c

ic_i

ci​對x

xx做卷積運算,相當於對x

xx的每乙個列向量做點積,即ci×

x∈r(

1,n)

c_i \times x \in\mathbb^

ci​×x∈

r(1,

n)所以用c

cc與x

xx做矩陣乘法即可得到卷積運算後的結果c×x

∈r(d

,n

)c \times x \in\mathbb^

c×x∈r(

d,n)

這一步和全連線層的矩陣乘法是等價的l×x

∈r(d

,n

)l \times x \in\mathbb^

l×x∈r(

d,n)

接下來用pytorch的**證明上述過程:

import torch

x = torch.randn(1,

5,4)

# batch-size = 1, d = 5, n = 4

c = torch.nn.conv1d(in_channels=

5, out_channels=

5, kernel_size=

1, bias=

false

)l = torch.nn.linear(in_features=

5, out_features=

5, bias=

false

)l.weight = torch.nn.parameter(c.weight[:,

:,0]

)print

(torch.allclose(c(x)

, l(x.transpose(1,

2)).transpose(1,

2)))

cuda 計算1維的卷積

1維卷積的公式如下.用c 序列計算,程式如下 void conv vector uin,vector vin,vector convout 1 32 endlastarr32 zeros 1,32 if iy 1 lastarr32 blocksstep1 33 64 endblocksstep2 ...

caffe中的卷積的計算細節和1x1卷積作用

在卷積神經網路中,卷積算是乙個必不可少的操作,下圖是乙個簡單的各層的關係。可以看出乙個很好的擴充套件的關係,下面是整個卷積的大概的過程 圖中上半部分是傳統的卷積的操作,下圖是乙個矩陣的相乘的操作。下圖是在乙個卷積層中將卷積操作展開的具體操作過程,他裡面按照卷積核的大小取資料然後展開,在同一張圖里的不...

卷積神經網路(1)

卷積神經網路作為一種置換了傳統網路中隱藏層的可自動提取樣本特徵的技術,具有較高的識別率。本文利用dlib與tensorflow平台實現了卷積神經網路人臉識別。結果準確率達到了0.984,取的了較為理想的結果。人臉識別是通過提取人的臉部特徵資訊進行身份識別的一種技術。目前,卷積神經網路在人臉識別上具有...