零基础-动手学深度学习-6.4. 多输入多输出通道

发布于:2025-07-27 ⋅ 阅读:(16) ⋅ 点赞:(0)

虽然我们在 6.1.4.1节中描述了构成每个图像的多个通道和多层卷积层。例如彩色图像具有标准的RGB通道来代表红、绿和蓝。 但是到目前为止,我们仅展示了单个输入和单个输出通道的简化例子。 这使得我们可以将输入、卷积核和输出看作二维张量。

但当我们添加通道时,我们的输入和隐藏的表示都变成了三维张量。本节将更深入地研究具有多输入和多输出通道的卷积核,多输入多输出通道可以用来扩展卷积层的模型。

6.4.1. 多输入通道

import torch
from d2l import torch as d2l

def corr2d_multi_in(X, K):
    # 先遍历“X”和“K”的第0个维度(通道维度),再把它们加在一起
    return sum(d2l.corr2d(x, k) for x, k in zip(X, K))
#zip将每个通道和卷积核对应起来

6.4.2. 多输出通道

def corr2d_multi_in_out(X, K):
    # 迭代“K”的第0个维度,每次都对输入“X”执行互相关运算。
    # 最后将所有结果都叠加在一起
    return torch.stack([corr2d_multi_in(X, k) for k in K], 0)

#torch.stack 是 PyTorch 中用于沿新维度拼接张量的函数。即是将一系列相同形状的张量按新维度堆叠起来,返回一个更高维度的张量。

通过将核张量KK+1K中每个元素加1)和K+2连接起来,构造了一个具有3个输出通道的卷积核

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

#输出为:torch.Size([3, 2, 2, 2]),即是三个三维张量从0维度连接起来

每个输出通道可以识别特定模式(红色,绿色,边缘),输入通道核识别并组合输入中的模式 

6.4.3. 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))
    # 全连接层中的矩阵乘法 这里可以看出通过reshape就是全连接层的处理
    Y = torch.matmul(K, X)
    return Y.reshape((c_o, h, w))

当执行1*1卷积运算时,上述函数相当于先前实现的互相关函数corr2d_multi_in_out。让我们用一些样本数据来验证这一点。

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)
assert float(torch.abs(Y1 - Y2).sum()) < 1e-6

该卷积层为基础应用时一般相当于全连接层,其通常调整网络层的通道数量和控制模型复杂性

输出通道数是卷积层的超参数! 每个输入通道都有独立的二维卷积核,所有通道结果相加得到一个输出通道的结果!!!


网站公告

今日签到

点亮在社区的每一天
去签到