1. ホーム
  2. ピトーチ

pytorchのnn.convのパラメータ群について

2022-02-28 07:14:30
<パス

pytorchのnn.convのパラメータについて
以前はtensor flow +kerasを使っていましたが、最近pytorchに乗り換えたところ、torchの畳み込みパラメータがtensorflowのものと少し違うことが分かったので、ここに記録します。


tensorflowとは異なり、in_channelsとout_channelsはそれぞれ入力と出力のチャンネル数、stride stepsとpaddingはkerasと同じ、groupsは主にグループ化畳み込みみたいなことをする面白いパラメータです、例えば
input_size = [1,6,1,1]とした場合、仮に
conv = nn.Conv2d(in_channels=6, out_channels=6, kernel_size=1, stride=1, dilation: null convolution; padding=0, groups=? ,
bias=False)
groups=1 の場合、デフォルトの畳み込み層である conv.weight.data.size は [6,6,1,1] となり、実際には 6 * 6=36 個のパラメータがありますが、group=3 の場合は out_channel/groups = 2 チャンネルのみが各グループに含まれるので、各畳み込み層のパラメータのサイズは [ 6,2,1,1 ]となります。group=3 の場合、各グループには out_channel/groups=2 チャンネルしか関与しないので、各畳み込み層のパラメータサイズは [ 6,2,1,1] となり、各グループには 6 * 2=12 のパラメータがあり、これは各グループを 3 回繰り返す(= group )ことに相当し、最後に concat される。
また、実際の実験では、同じネットワーク構造であれば、このグループ化されたコンボリューションの方がグループ化されていないコンボリューションより優れています。