美文网首页
mxnet:卷积层的多输入通道和多输出通道

mxnet:卷积层的多输入通道和多输出通道

作者: AI秘籍 | 来源:发表于2020-04-26 20:36 被阅读0次

1.卷积层的多输入通道

当输入数据含有多个通道时,
我们要构造一个与输入数据的通道数相等的卷积核,
从而能够与含多通道的输入数据做互相关运算.
假设输入数据的通道数为ci,那么卷积核的输入通道数同样为ci.

设卷积核窗口形状为kh × kw。
当ci = 1时,我们知道卷积核只包含⼀个形状为kh × kw的⼆维数组。
当ci > 1时,我们将会为每个输⼊通道各分配⼀个形状为kh × kw的核数组。把这ci个数组在输⼊通道维上连结,即得到⼀个形状为ci × kh × kw的卷积核。
由于输⼊和卷积核各有ci个通道,我们可以在各个通道上对输⼊的⼆维数组和卷积核的⼆维核数组做互相关运算,
再将这ci个互相关运算的⼆维输出按通道相加,得到⼀个⼆维数组。
这就是含多个通道的输⼊数据与多输⼊通道的卷积核做⼆维互相关运算的输出。


image.png

程序:

from mxnet import nd

def corr2d(X, K):
    """Compute 2D cross-correlation."""
    h, w = K.shape
    Y = nd.zeros((X.shape[0] - h + 1, X.shape[1] - w + 1))
    for i in range(Y.shape[0]):
        for j in range(Y.shape[1]):
            Y[i, j] = (X[i: i + h, j: j + w] * K).sum()
    return Y


def corr2d_multi_in(X, K):
    # 首先沿着X和K的第0维(通道维)遍历
    # 然后使用*将结果列表变成add_n函数的位置参数(positional argument)来进行相加
    return nd.add_n(*[corr2d(x,k) for x, k in zip(X, K)])

if __name__ == "__main__":
    # 2通道输入数据
    X = nd.array([[[0, 1, 2],[3, 4, 5],[6, 7, 8]],
                              [[1, 2, 3],[4, 5, 6],[7, 8, 9]]])
    
    # 2通道卷积核
    K = nd.array([[[0,1],[2,3]],[[1,2],[3,4]]])

    print(corr2d_multi_in(X, K))
image.png

2.卷积层的多输出通道

如果我们希望得到多个通道的输出数据,我们应该怎么定义卷积核数组.

设卷积核输⼊通道数和输出通道数分别为ci和co,⾼和宽分别为kh和kw。
如果希望得到含多个通道的输出,
我们可以为每个输出通道分别创建形状为ci × kh × kw的核数组。
将它们在输出通道维上连结,卷积核的形状即co × ci × kh × kw。
在做互相关运算时,
每个输出通道上的结果由卷积核在该输出通道上的核数组与整个输⼊数组计算而来

image.png

程序:

from mxnet import nd


def corr2d(X, K):
    """Compute 2D cross-correlation."""
    h, w = K.shape
    Y = nd.zeros((X.shape[0] - h + 1, X.shape[1] - w + 1))
    for i in range(Y.shape[0]):
        for j in range(Y.shape[1]):
            Y[i, j] = (X[i: i + h, j: j + w] * K).sum()
    return Y


def corr2d_multi_in(X, K):
    # 首先沿着X和K的第0维(通道维)遍历
    # 然后使用*将结果列表变成add_n函数的位置参数(positional argument)来进行相加
    return nd.add_n(*[corr2d(x,k) for x, k in zip(X, K)])


def corr2d_multi_out(X, K):
    # 对K的第0维遍历,
    # 每次同输入X做互相关计算,所有结果使用stack函数合并在一起.
    return nd.stack(*[corr2d_multi_in(X, k) for k in K])




if __name__ == "__main__":
    # 2通道输入数据
    X = nd.array([[[0, 1, 2],[3, 4, 5],[6, 7, 8]],
                              [[1, 2, 3],[4, 5, 6],[7, 8, 9]]])
    
    
    K = nd.array([[[0,1],[2,3]],[[1,2],[3,4]]])
    K = nd.stack(K, K+1, K+2)
    # 3输出通道,2输入通道,2行2列
    print(K.shape)

    # 卷积层的多通道输出
    # 每个输出通道上的结果由卷积核在该输出通道上的核数组与整个输入数组计算而来
    print(corr2d_multi_out(X, K))
image.png

相关文章

  • mxnet:卷积层的多输入通道和多输出通道

    1.卷积层的多输入通道 当输入数据含有多个通道时,我们要构造一个与输入数据的通道数相等的卷积核,从而能够与含多通道...

  • Shufflenet V2中的结论

    1 卷积层的输入输出特征通道数对MAC指标的影响。 结论:卷积层的输入和输出特征通道数相等时MAC最小,此时模型速...

  • 第五天-卷积神经网络基础,LeNet,卷积神经网络进阶

    卷积神经网络基础 本节我们介绍卷积神经网络的基础概念,主要是卷积层和池化层,并解释填充、步幅、输入通道和输出通道的...

  • 卷积神经网络基础 2020-02-18

    卷积神经网络基础 本节我们介绍卷积神经网络的基础概念,主要是卷积层和池化层,并解释填充、步幅、输入通道和输出通道的...

  • [动手学深度学习-PyTorch版]-5.3卷积神经网络-多输入

    5.3 多输入通道和多输出通道[https://tangshusen.me/Dive-into-DL-PyTorc...

  • 深度学习-2

    1.卷积神经网络基础 主要包括:卷积层、池化层,以及一些参数的含义:padding、步幅、输入通道、输出通道。 二...

  • 四.CNN及各模型

    1.卷积神经网络基础 主要是卷积层和池化层,并解释填充、步幅、输入通道和输出通道的含义,介绍各种概念 1.1二维互...

  • 容易忘记的机器学习相关概念

    一、 关于w和b的数量计算。 1、卷积层 w = 卷积核 * 卷积核 * 上一层深度(通道数) b = 通道数 2...

  • 卷积神经网络

    本文主要介绍一些卷积层和池化层,并解释填充、步幅、输入通道和输出通道的含义。以及LeNet的一些应用 二维互相关运...

  • 卷积神经网络基础知识

    卷积核的厚度=被卷积的图像的通道数卷积核的个数=卷机操作后输出的通道数 图片卷积输出大小计算公式:N=(W-F+2...

网友评论

      本文标题:mxnet:卷积层的多输入通道和多输出通道

      本文链接:https://www.haomeiwen.com/subject/ogetwhtx.html