Skip to content
Menu
CDhistory
CDhistory

1D および 3D コンボリューションを MS Excel で説明します!

Posted on 5月 23, 2021 by admin

最初の投稿で 2D コンボリューションから始めたのは、コンボリューションがコンピューター ビジョンの分野で成功し、大きな人気を得たからです。 この分野のタスクは画像を入力として使用し、自然画像は通常 2 つの空間次元(高さと幅)に沿ったパターンを持っているので、1D および 3D コンボリューションよりも 2D コンボリューションの例を見るのが一般的です。 この領域のタスクは入力としてテキストを使用し、テキストは単一の空間次元(すなわち時間)に沿ったパターンを持つので、1D Convolutions は非常に適しています。 LSTMやGRUといった従来のリカレントニューラルネットワーク(RNN)の代わりとして、より効率的に使用することができるのです。 RNNとは異なり、1D Convolutionsは並列に実行することができ、非常に高速な計算が可能です。

1Dコンボリューションから恩恵を受ける別の領域は、時系列モデリングです。 前述したように、入力データには1つの空間次元(すなわち時間)があり、一定期間のパターンをピックアップしたいのです。 このようなデータは、値の並びとして見ることができるので、よく「シーケンシャル」と呼ばれる。 また、空間的な次元を「時間的」な次元と呼ぶことが多い。 RNNの前に1次元コンボリューションを使うのもよくあることで、LSTNetモデルはその一例で、交通予測のための予測は以下の通りです。

Figure 1: LSTNet using 1D Convolution for time series forecasting of traffic (source)

A, B, C. (1,3,3) dot (2,0,1) = 5.

名前付けがわかったところで、計算を詳しく見ていきましょう。 幸運なことに、1次元畳み込みは実際には2次元畳み込みの簡略版に過ぎないからです!

図2:カーネルのサイズが3である1次元畳み込みを1×6入力行列に適用して1×4出力を得たものです。

1つの出力値の計算を通して、サイズ3のカーネルを入力配列の左側の等しいサイズの領域に適用することができます。 入力領域とカーネルの「ドットプロダクト」を計算します。これは単に要素ごとの積(つまり、色のペアを掛ける)であり、単一の値を得るために全体の和が続きます。 つまり、この場合、

(1*2) + (3*0) + (3*1) = 5

入力配列の他の領域にも同じ操作(同じカーネル)を適用し、(5,6,7,2) の出力配列を得られます。 カーネルを 2 方向にスライドさせる 2D 畳み込みとは異なり、1D 畳み込みではカーネルを 1 方向にのみスライドさせます (この図では左/右)。 カーネルの形状を 3 と定義し、この例では単一のカーネルを使用するため、channels=1.

import mxnet as mxconv = mx.gluon.nn.Conv1D(channels=1,
kernel_size=3)

これで、定義済みのカーネルを使用して、conv ブロックに入力を渡すことができるようになりました。

input_data = mx.nd.array((1,3,3,0,1,2))
kernel = mx.nd.array((2,0,1))# see appendix for definition of `apply_conv`
output_data = apply_conv(input_data, kernel, conv)
print(output_data)# ]]
# <NDArray 1x1x4 @cpu(0)>

パディング、ストライド、ダイレーションで何が変わるか?

前回の2D Convolutionsの投稿でパディング、ストライド、ダイレーションの効果を見ましたが、1D Convolutionsでも非常によく似ています。 パディングでは、今回は1つの次元(時間的次元)に沿ってのみパディングします。 この図は横軸に時間を表しているので、入力データの左と右にパディングする(2次元畳み込みの例のように上と下にはしない)。 また、StrideとDilationについても、時間軸に沿ってのみ適用する。 つまり、パディングとストライドの例は次のようになります:

図 3: サイズ 3、パディング 1、ストライド 2 のカーネルで 1×6 入力行列を 1×3 出力となるよう適用された 1D Convolution の例。

コード中に2つの追加引数を追加する。 padding=1 と strides=2 です。

conv = mx.gluon.nn.Conv1D(channels=1, kernel_size=3,
padding=1, strides=2)output_data = apply_conv(input_data, kernel, conv)
print(output_data)# ]]
# <NDArray 1x1x3 @cpu(0)>

Advanced: 入力データの次元はレイアウトと呼ばれる特定の順序に従わなければなりません。 デフォルトでは1次元の畳み込みは’NCW’、すなわちバッチサイズ (N) * チャンネル (C) * 幅/時間 (W) のフォーマットの入力データに適用されることを想定しています。 そして、2次元コンボリューションのデフォルトはNCHW、すなわち、バッチサイズ (N) * チャンネル (C) * 高さ (H) * 幅 (W)です。 Conv1D と Conv2D.

の layout 引数をチェックしてください。

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

最近の投稿

  • アセラ復活。 NYCまたはボストンで99ドル
  • OMIM Entry – # 608363 – CHROMOSOME 22q11.2 DUPLICATION SYNDROME
  • Kate Albrecht’s Parents – Learn More About Her Father Chris Albrecht And Mother Annie Albrecht
  • テンプル・フォーク・アウトフィッターズ
  • Burr(小説)

アーカイブ

  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • DeutschDeutsch
  • NederlandsNederlands
  • SvenskaSvenska
  • DanskDansk
  • EspañolEspañol
  • FrançaisFrançais
  • PortuguêsPortuguês
  • ItalianoItaliano
  • RomânăRomână
  • PolskiPolski
  • ČeštinaČeština
  • MagyarMagyar
  • SuomiSuomi
  • 日本語日本語
©2022 CDhistory | Powered by WordPress & Superb Themes