动手学深度学习v2-卷积层的多输入多输出通道

多个输入和输出通道:

输出通道:每个输出通道可以识别特定模式。

输入通道:输入通道核识别并组合输入中的模式。

我们可以认为在输出通道中获取到图片的局部特征,然后经过输入通道得到一个更加完整的特征。

总结:

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

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

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

# 实现一下多输入通道互相关运算---------------------------------
import d2l import torch d2l
from d2l import torch as d2l

def corr2d_multi_in(X, K):
    return sum(d2l.corr2d(x, k) for x, k in zip(X, K))

# 验证互相关运算的输出
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]]])
#------------------------------------------------------------

# 计算多个通道的输出的互相关函数---------------------
def corr2d_multi_in_out(X, K):
    return torch.stack([corr2d_multi_in(X, k) for k in K], 0)

K = torch.stack((K, K+1, K+2), 0)
K.shape

corr2d_multi_in_out(X, K)
#-------------------------------------------------

# 1×1卷积 等价 一个全连接--------------------------
def corr2d_multi_in_out_1×1(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)
    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_1×1(X, K)
Y2 = corr2d_multi_in_out(X, K)
assert float(torch.abs(Y1 - Y2).sum()) < 1e-6
#-------------------------------------------------


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值