李沐21_卷积层多输入多输出通道——自学笔记

多输入通道

1.彩色图像可能有RGB三个通道

2.转换为灰色会丢失信息

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

多输出通道

1.无论有多少输入通道,可以有多个三维卷积核,每个核生成一个输出通道

多个输入和输出通道

1.每个输出通道可以识别特定模式

2.输入通道核识别并组合输入中的模式

1✖1卷积层

1.kh=kw=1,它不识别空间模式,只是融合通道,相当于输入形状是nhnw✖ci,权重co✖ci的全连接层。

总结

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

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

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

代码实现

多输入多输出通道

import torch
from d2l import torch as d2l

def corr2d_multi_in(X,K):  # 互相关运算处理多个通道(X和K都是三维)
  return sum(d2l.corr2d(x,k) for x,k in zip(X,K)) # for:每一次输入通道的小矩阵

验证互相关运算的输出

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)
tensor([[ 56.,  72.],
        [104., 120.]])

计算多个通道的输出的互相关函数

def corr2d_multi_in_out(X,K):
  return torch.stack([corr2d_multi_in(X,k) for k in K],0)  # 从4D的K中拿出一个3D的k进行上一步的操作
K=torch.stack((K,K+1,K+2),0)  # 在第0维把K,K+1,K+2堆叠成新的矩阵
K.shape            # stack: 沿着一个新的维度串联一连串的张量
torch.Size([3, 2, 2, 2])
corr2d_multi_in_out(X, K)  # 三个卷积核,每个卷积核有两个通道,每个通道是2✖2的矩阵
tensor([[[ 56.,  72.],
         [104., 120.]],

        [[ 76., 100.],
         [148., 172.]],

        [[ 96., 128.],
         [192., 224.]]])

1✖1的卷积

def corr2d_multi_in_out_1x1(X,K):
  c_i,h,w = X.shape
  c_o = K.shape[0] # K的第一个shape
  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_1x1(X,K)
Y2=corr2d_multi_in_out(X,K)
assert float(torch.abs(Y1-Y2).sum()) < 1e-6

# Y1=Y2: 是因为用了1✖1的kernel后,把单通道的输入变成向量计算得到的值Y1=直接当作矩阵计算得到的值Y2

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-10 16:34:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-10 16:34:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-10 16:34:02       82 阅读
  4. Python语言-面向对象

    2024-04-10 16:34:02       91 阅读

热门阅读

  1. uniapp的一些记录

    2024-04-10 16:34:02       37 阅读
  2. 快速解决关于Quartus打不开图像文件问题

    2024-04-10 16:34:02       45 阅读
  3. 用队列实现栈(C)

    2024-04-10 16:34:02       32 阅读
  4. PostgreSQL开发与实战(8.1)PG的锁1

    2024-04-10 16:34:02       44 阅读
  5. 88. 合并两个有序数组

    2024-04-10 16:34:02       38 阅读
  6. npm常用命令详解

    2024-04-10 16:34:02       29 阅读
  7. ChatGPT助力学术写作:无缝撰写论文技巧

    2024-04-10 16:34:02       39 阅读
  8. Circuits--Sequential--Registers_2

    2024-04-10 16:34:02       34 阅读