pytorch 回旋层:滤波器也通过nlayers_in进行卷积还是采用所有维度?

pinkon5k  于 2022-11-29  发布在  其他
关注(0)|答案(2)|浏览(140)

在领先的DeepLearning库中,过滤器卷积层中的(也称为核或权重)也在“通道”维度上进行卷积,还是同时采用所有通道?例如,如果输入维度为(60,60,10)(其中最后一个维度通常被称为“声道”)并且声道的期望输出数量是5,过滤器可以是(5,5,5,5)还是应该是(5,5,10,5)

7fyelxc5

7fyelxc51#

它应该是(5,5,10,5)。如果忽略空间维度,Conv2d操作就像线性一样。
来自TensorFlow文档link(https://www.tensorflow.org/api_docs/python/tf/nn/conv2d):
给定shape batch_shape +[in_height,in_width,in_channels]的输入Tensor和shape**[filter_height,filter_width,in_channels,out_channels]**的过滤器/内核Tensor,此操作将执行以下操作:
1.将滤镜展平为形状为[filter_height * filter_width * in_channels,output_channels]的二维矩阵。
1.从输入Tensor中提取图像面片以形成形状的虚拟Tensor[batch,out_height,out_width,filter_height * filter_width * in_channels]。
1.对于每个面片,将过滤器矩阵和图像面片向量右乘。

zpf6vheq

zpf6vheq2#

它一次占用所有通道,所以5×5×10×5应该是正确的。

julia> using Flux

julia> c = Conv((5,5), 10 => 5);  # make a layer, 10 channels to 5

julia> c.weight |> summary
"5×5×10×5 Array{Float32, 4}"

julia> c(randn(Float32, 60, 60, 10, 1)) |> summary  # check it works
"56×56×5×1 Array{Float32, 4}"

julia> Conv(rand(Float32, (5,5,5,5)))  # different weight size
Conv((5, 5), 5 => 5)  # 630 parameters

相关问题