torch.nn.Conv1dと1次元畳み込みの説明
最近、wavenetの作業をしていて、1次元畳み込みに出会ったので、次回の使用のために、1次元畳み込みとそのAPIをpytorchでまとめておきます。
私が初めて1次元畳み込みに出会ったとき、1次元畳み込みカーネルが1行で畳み込んでいるのだと思ったが、この理解は間違っていた。1次元畳み込みは、畳み込みカーネルが1次元であるということではなく、また畳み込まれる特徴量も1次元であるということでもない。1次元とは、畳み込みの方向が1次元であることを意味する。
まず、1次元畳み込みの簡単な例(バッチサイズが1で、カーネルが1つだけの場合)を見てみよう。
入力
長さ35のシーケンスで、シーケンスの各要素は256次元の特徴を持つので、入力は (35,256) と見なすことができる。
コンボリューションカーネル:size = (k,) , (k = 2)
この画像はデータが1つしかない場合のみで、データがバッチにまとめられている場合は、次のようにコードで表現することができます。
from torch.autograd import Variable
conv1 = nn.Conv1d(in_channels=256,out_channels = 100, kernel_size = 2)
input = torch.randn(32, 35, 256)
# batch_size x text_len x embedding_size -> batch_size x embedding_size x text_len
input = input.permute(0, 2, 1)
input = Variable(input)
out = conv1(input)
print(out.size())
出力します。
torch.Size([32, 100, 34])
この結果を分析する前に、nn.Conv1dの公式ドキュメントをご覧ください。
// This can be interpreted as the dimensionality of the features
in_channels - Number of channels in the input image
// The number of channels produced by the convolution kernel
out_channels - Number of channels produced by the convolution
// Size of the convolution kernel, only the size of the convolution direction needs to be specified (since it is one-dimensional)
kernel_size - Size of the convolving kernel
stride - Stride of the convolution
padding - Zero-padding added to both sides of the input
dilation - Spacing between kernel elements
groups - Number of blocked connections from input channels to output channels
bias - If True, adds a learnable bias to the output
もう一度出力を見てみましょう:torch.Size([32, 100, 34])
入力データの最初の次元はバッチサイズ、次の2次元は前の例と同じ、違いは出力で、長さは34になり(畳み込みカーネルのサイズは2)、100個の畳み込みカーネルがあるので、100個の特徴マップが生成される
これは、nn.Conv1dが入力データの最後の次元に対して1次元の畳み込みを行うためである。畳み込み方向を正しく設定するためには,入力配列の長さの次元を最後に置く,つまりpermute関数を用いて1次元の畳み込みを実現する必要があります.
関連
-
[解決済み】pytorchでテンソルを平らにする方法は?
-
pytorchのSpeat()関数
-
torch.stack()の公式解説、詳細、例題について
-
torch.catとtorch.stackの違いについて
-
pytorch-DataLoader (データイテレータ)
-
AttributeError: 'Graph' オブジェクトには 'node' という属性がありません。
-
pytorchにおける次元とそのsqueeze()、unsqueeze()関数の理解
-
pytorchのnn.convのパラメータ群について
-
RuntimeError: CUDAエラー: 不正なメモリアクセスが発生しました。
-
pytorchのマルチGPU利用 - #CUDA_VISIBLE_DEVICES use #torch.nn.DataParallel() #エラー解決
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pytorch ある割合で特定の値を持つランダムなint型テンソルを作成する方法は?例えば、25%が1で残りが0というような。
-
Pytorch-1-TX2にpytorchをインストール(自分でやったよ)
-
AttributeError NoneType オブジェクトに属性データがない。
-
ピトーチリピートの使用方法
-
Pytorch torch.Tensor.detach()メソッドの使い方と、指定したモジュールの重みを変更する方法
-
torch.stack()の使用
-
pytorchラーニングノート(XIV)。DataLoaderのソースコード読み込み
-
EOFError: 入力がなくなった
-
Silve pil.unidentifiedimageerror: cannot identify image file
-
pytorchのConv1dの詳細説明