卷積的理解 python代碼實現 pytorch 多輸入多輸出通道的理解


1.多輸入通道

  當輸入數據含多個通道時,我們需要構造一個輸入通道數與輸入數據的通道數相同的卷積核。以1維卷積為例,卷積窗口大小為1*1,輸入有三個通道,所以卷積的通道數也應該為3個通道。如下圖所示,輸入的數據有三個通道,卷積也有三個通道,每個通道都是一個1維的卷積核且卷積核的大小為11, 但是這樣當輸入通道有多個時,我們對各個通道的結果進行了累加,所以不論輸入通道數是多少,輸出通道數總是1.

        

代碼實現:

ef corr2d(X,K): 
    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    

def corr2d_mutil_in(X,K):
    h,w = K.shape[1],K.shape[2]
    value = torch.zeros(X.shape[0] - h + 1,X.shape[1] - w + 1)
    for x,k in zip(X,K):
        value = value + corr2d(x,k)
    return value 

X = torch.tensor([[[1,2,3],[4,5,6],[7,8,9]],
                  [[1,1,1],[1,1,1],[1,1,1]],
                  [[2,2,2],[2,2,2],[2,2,2]]])
K = torch.tensor([[[1]],[[2]],[[3]]])
print(K.shape)
corr2d_mutil_in(X,K) 

Output:
tensor([[ 9., 10., 11.],
        [12., 13., 14.],
        [15., 16., 17.]])

 

2.多輸出通道

           

X = torch.tensor([[[1,2,3],[4,5,6],[7,8,9]],
                  [[1,1,1],[1,1,1],[1,1,1]],
                  [[2,2,2],[2,2,2],[2,2,2]]]) 

K = torch.tensor([[[[1]],[[2]],[[3]]],
                  [[[4]],[[1]],[[1]]],
                  [[[5]],[[3]],[[3]]]])
print(K.shape)

輸出:
torch.Size([3, 3, 1, 1])
def corr2d_multi_in_out(X,K):
    return torch.stack([corr2d_mutil_in(X,k) for k in K])

corr2d_multi_in_out(X,K)

輸出:
tensor([[[ 9., 10., 11.],
         [12., 13., 14.],
         [15., 16., 17.]],

        [[ 7., 11., 15.],
         [19., 23., 27.],
         [31., 35., 39.]],

        [[14., 19., 24.],
         [29., 34., 39.],
         [44., 49., 54.]]])

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM