卷积基础——多输入输出通道

多输入通道

1. 每个通道都有一个卷积核,结果是所有通道卷积结果的和

2. 输入X:c_i \times n_h \times n_w

    核W:c_i \times k_h \times k_w

    输出Y:m_h \times m_w

    Y=\sum_{i=0}^{c_i}X_i \times W_i

(1 × 1 + 2 × 2 + 4 × 3 + 5 × 4) + (0 × 0 + 1 × 1 + 3 × 2 + 4 × 3) = 56

多输出通道

1. 每个多输入通道进行完卷积运算,计算结果为一个单输出通道

1. 多个三维卷积核(c_i \times n_h \times n_w),每个核生成一个输出通道

2.输入X:c_i \times n_h \times n_w

   核W:c_o\times c_i \times k_h \times k_w

   输出Y:c_o\times m_h \times m_w

   Y_i= X \times W_i~~~for~i=1...c_o

多输入和输出通道

多输出通道:识别特定模式(特征提取)

多输入通道:识别特定模式并组合(权重使得我们可以人为对各种模式所起作用的大小进行自定义)

1*1卷积层

1 × 1卷积,即k_h=k_w=1。因为使用了最小窗口,1 × 1卷积失去了卷积层的特有能力——在高度和宽度维度上,识别相邻元素间相互作用的能力。其实1 × 1卷积的唯⼀计算发⽣在通道上。相当于输入为 n_hn_w\times c_i,权重为 c_o\times c_i的全连接层。

二维卷积层

输入X:c_i \times n_h \times n_w

W:c_o\times c_i \times k_h \times k_w

偏差B:c_o\times c_i

输出Y:c_o\times m_h \times m_w

Y_i= X \times W+B

总结

1. 输出通道数是卷积层的超参数

2. 每个输出通道有独立的二维卷积核,所有通道结果相加得到一个输出通道结果

3. 每个输出通道有独立的三维卷积核

代码

多输入通道互相关运算

import torch
from d2l import torch as d2l

#X 输入 K卷积核
def corr2d_multi_in(X,K):
    return sum(d2l.corr2d(x,k) for x,k in zip(X,K))

#Ci=2
X = torch.tensor([[[0.0, 1.0, 2.0], 
                   [3.0, 4.0, 5.0], 
                   [6.0, 7.0, 8.0]],

                  [[1.0, 2.0, 3.0], 
                   [4.0, 5.0, 6.0], 
                   [7.0, 8.0, 9.0]]])

K = torch.tensor([[[0.0, 1.0], 
                   [2.0, 3.0]], 

                   [[1.0, 2.0], 
                    [3.0, 4.0]]])
corr2d_multi_in(X, K)

多输出通道互相关运算

def corr2d_multi_in_out(X,K):
    return torch.stack([corr2d_multi_in(X,k) for k in K],0)

# 输出通道1:K 
# 输出通道2: K+1
# 输出通道3: K+2
# Co=3
K = torch.stack((K, K+1, K+2),0)
corr2d_multi_in_out(X,K)

1*1卷积

def corr2d_multi_in_out_1x1(X,K):
    c_i, h, w = X.shape
    c_o = K.shape[0]
    X = X.reshape((c_i, h*w))
    K = K.reshape((c_o, c_i))
    Y = torch.matmul(K,X)  # Y=(c_o, h*w)
    return Y.reshape((c_o,h,w))

X = torch.normal(0,1,(3,3,3))
K = torch.normal(0,1,(2,3,1,1))

Y1 = corr2d_multi_in_out_1x1(X,K)
Y2 = corr2d_multi_in_out(X,K)

# 可以认为Y1==Y2
assert float(torch.abs(Y1-Y2).sum())<1e-6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值