Conv2d関数詳細説明(Pytorch)
2022-02-28 10:01:16
<ブロッククオート
この記事は、PytorchフレームワークのAPIであるConv2d()に基づいています。この関数は2次元入力で使用されますが、1次元入力のConv1d()、3次元入力のConv3d()もあります。Conv2d()のパラメータは以下の通りです。
I. パラメータの紹介
def __init__(
self,
in_channels: int,
out_channels: int,
kernel_size: _size_2_t,
stride: _size_2_t = 1,
padding: _size_2_t = 0,
dilation: _size_2_t = 1,
groups: int = 1,
bias: bool = True,
padding_mode: str = 'zeros' # TODO: refine this type
):
- in_channels: ネットワーク入力のためのチャンネル数。
- out_channels: ネットワーク出力のチャンネル数。
- kernel_size: 畳み込みカーネルのサイズ、このパラメータが整数qの場合、畳み込みカーネルのサイズはqXqとなる。
- stride: ステップサイズ。コンボリューション処理で移動するステップサイズである。一般にコンボリューションカーネルは,入力画像の左から右,上から下へと移動する.パラメータが整数の場合,水平方向,垂直方向ともにその整数がデフォルトとなる。stride=(2, 1)の場合、2は高さ(h)を2段階、1は幅(w)を1段階移動させることを意味する。
- padding: パディング、デフォルトは0パディング。
-
dilation: 拡張。一般に、畳み込みカーネルと入力画像の対応する位置との間の計算は同じ大きさ、つまり、畳み込みカーネルの大きさが3X3であれば、それが一度に入力画像に作用する範囲は3X3であり、この場合、dilation=0となる。 dilation=1だと、下図のようなケースを意味する。
- groups:グループ化。のグループ分けを指す。 入力チャネル groups=1の場合、入力は1つのグループ、出力は1つのグループとなります。groups=2の場合、入力は2つのグループに分けられ、対応する出力も2つのグループに分けられる。また、in_channelsとout_channelsはgroupsで割り切れる必要があることに注意してください。
- bias: biasパラメータ。bool型で、bias=Trueのとき、後方フィードバックで学習されたパラメータbが適用されることを意味する。
- padding_mode: パディングモード、padding_mode='zeros' はパディングが0であることを意味する。
次に、これらのパラメータを調整することで、感触を確かめます。
1. 結果 1
import torch
import torch.nn as nn
# The input is a vector with N=20, C=16, H=50, W=100
m = nn.Conv2d(16, 33, 3, stride=2)
input = torch.randn(20, 16, 50, 100)
output = m(input)
print(output.size())
- nn.Conv2d()の第1引数は、入力のチャンネル数(16)と同じにすること。nn.Conv2d()の第2引数は出力のチャンネル数を表します. 出力は、N=20はそのまま、C=33となります。50X100 の入力は、ステップサイズ 2 の 3X3 コンボリューションカーネルによって 24X49 になります。
torch.Size([20, 33, 24, 49])
2. 結果 2
import torch
import torch.nn as nn
m = nn.Conv2d(16, 33, 3, stride=(1, 2))
input = torch.randn(20, 16, 50, 100)
output = m(input)
print(output.size())
-前のステップのstride=2はstride=(2, 2)を意味するが、ここではstride=(1, 2)を追加して、右へのステップを1、下へのステップを2とする。 出力は次のようになる。
torch.Size([20, 33, 48, 49])
3. 結果 3
import torch
import torch.nn as nn
m = nn.Conv2d(16, 33, (3, 5), stride=2, padding=(4, 2))
input = torch.randn(20, 16, 50, 100)
output = m(input)
print(output.size())
- ここではpadding=(4, 2)を付けていますが、これは左右方向に4ターン、上下方向に2ターンの0パディングを意味し、58X104の入力に相当します(元の入力は50X100です)。
torch.Size([20, 33, 28, 50])
III. 概要
Conv2d()は畳み込みニューラルネットワークの演算関数で、この関数のパラメータを理解することがCNNをうまく使うためのポイントになります。
関連
-
ResNetの紹介
-
[Tensorflow-Error】CUDA_ERROR_OUT_OF_MEMORY:メモリが不足しています。
-
Tensorflow 踩坑:ImportError: DLL のロードに失敗しました。指定されたモジュールが見つかりません。 TensorFlowのネイティブランタイムのロードに失敗しました。
-
ImportError: libSM.so.6: cannot open shared object file: そのようなファイルやディレクトリはありません
-
PackagesNotFoundError: 次のパッケージは、現在のチャンネルから利用できません ソリューション
-
Tensorflowのメタフィジカルエラーです。終了コード -1073741819 (0xC0000005)
-
with open() as f Usage
-
Tensorflow-gpu2.0.0インストールとtensorflow-gpuインストール成功のテストプログラム。
-
体系的学習ディープラーニング(VIII)-損失関数
-
一般的に使用されている公開データセット
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
OrderedDict' オブジェクトに 'eval' 属性がありません。
-
参照用シークレットを呼び出す:BN層詳細解説
-
カーネルが死んだようです」の解決法。自動的に再起動します" の解決方法
-
caffeのインストールで「error : too few arguments in function call」エラーが発生する。
-
tensorflow experience code error Adding visible gpu devices: 0 , モジュール 'tensorflow' には 'Session' という属性がありません。
-
AttributeError: 'tuple' オブジェクトには 'log_softmax' という属性がありません。
-
ディープラーニングにおけるconcatenateの使用について
-
TensorFlowテストプログラム
-
ERROR: Command errored out with exit status 1: python setup.py egg_info 完全なログを確認してください。
-
知識蒸留法(Knowledge Distillation)