python-3.x - 转置卷积层如何将其内核应用于输入?
问题描述
我知道卷积层如何将其内核应用于输入,但我不明白转置卷积层如何将其内核应用于输入。我的主要问题如下。
问题:如果一个卷积层接受一个三通道输入并输出一个两通道输出,并且每个内核的形状是 2x2,我肯定知道它将有 6 个内核分为两组,因为它要给出一个 2 通道输出因此,下面显示了两组。
>>> from torch import nn
>>> conv1 = nn.Conv2d(3,2,2,1,0)
>>> conv1.weight.data.numpy()
array([[[[-0.09294177, 0.19253497],
[-0.27820718, -0.07189114]],
[[-0.27682984, -0.05606458], <---- one group
[ 0.01134909, -0.21749675]],
[[-0.2351923 , 0.2374857 ],
[-0.0346033 , -0.26447 ]]],
[[[ 0.2467276 , 0.06628369],
[ 0.26501465, 0.11644475]],
<----- one group making two
groups of three
[[-0.09835644, -0.06396657],
[-0.05590855, 0.06890304]],
[[ 0.22788118, 0.22287966],
[-0.20899878, -0.03188486]]]], dtype=float32)
您可以看到它有六个内核,分为两组,每组 3 个,这是有道理的,但是如果转置卷积层要接受三通道输入并输出两通道输出,并且每个内核的形状为 2x2,为什么会这样它不是将 6 个内核分成两组,每组三个,而是将 6 个内核分成 3 组,每组两个,如下所示?
>>> conv2 = nn.ConvTranspose2d(3,2,2,1,0)
>>> conv2.weight.data.numpy()
array([[[[ 0.28577724, -0.29587495],
[-0.24003945, -0.3524448 ]],
<---- one group
[[-0.15984103, 0.22188954],
[-0.10990701, -0.20565327]]],
[[[ 0.17101079, -0.17623127],
[-0.12097928, -0.0211492 ]],
<----- one group
[[-0.21161021, -0.33530322],
[-0.16497111, 0.19984488]]],
[[[-0.05084743, -0.2563213 ],
[-0.28287342, -0.30839682]],
<----- one group making three groups
two
[[-0.330719 , 0.07809895],
[-0.16823643, -0.34404978]]]], dtype=float32)
上面可以看到,它有6个内核分成3组,每组2个。不是说要分成2组,每组3个,因为它要给出两个通道,所以它应该像卷积层一样分成两组? 为什么会这样排列?6 个内核如何分成 3 组,每组 2 个,如何将一个 3 通道输入变为两个?
解决方案
推荐阅读
- python - 如何使用 terraform local-exec provisioner 在 virtualenv 中运行 ansible
- django - 我可以在一个 Django 项目中使用多少个应用程序
- php - 图片上传后背景为白色
- javascript - 离线使用引导程序
- xml - XSLT 2.0 语法问题中的 xsl:key 元素
- reactjs - 从显示组件获取状态
- angular - ng add angular/material @angular/cdk @angular/animations => Schematics/alias "install" 与另一个别名或原理图名称冲突
- excel - 使用VBA转XML,XML Schema应用不一致
- reactjs - 我无法向 react-select 组件添加验证
- sqlite - 在 Flutter 中捕获 DatabaseException