《动手学》多输入通道多输出通道

1.理论

1.1 多输入通道

每个通道都有一个卷积核,结果是所有通道卷积结果的和
在这里插入图片描述
在这里插入图片描述

1.2 多输出通道

在这里插入图片描述
在这里插入图片描述

1.3 多通道的意义

每个输出通道可以识别特定模式,当把这些特定模式作为下一层的输入通道时,就可以将这些模式组合起来,(一开始识别局部的纹理信息之类的,通过组合这些,最终学习到高级的语义信息。)
在这里插入图片描述

1.4 1*1卷积层

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里,11卷积层不识别空间信息,只是融合通道,相当于NhNw个Ci的输入向量,输出为C0,权重为C0Ci,
强调:一个向量为Ci,只是有Nh
Nw个向量。输出也是C0,只是有Nh*Nw个。

1.4 二维卷积层

在这里插入图片描述
12TF表示的是12TFlops/s(每秒12T浮点数运算)

1.5总结

在这里插入图片描述

代码

zip会把0维度的东西拿出来遍历的

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))

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)

多输出t通道

def corr2d_multi_in_out(X, K):
    # 迭代“K”的第0个维度,每次都对输入“X”执行互相关运算。
    # 最后将所有结果都叠加在一起
    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)

【重点】torch.stack((K, K + 1, K + 2), 0),torch.stack(,0)会多出一个维度来的。
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)
    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

QA

  • 卷积的bias作用越来越小,可以加也可以不加
  • 卷积能够获取到位置信息,就是根据它的卷积核来确定的。
  • feature map就是你的卷积的输出,一般是高和宽,有时会算上通道数
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值