ND畳み込み逆プログラム
私の教育では、畳み込みニューラルネットワークにN次元畳み込み層を実装しようとしています。 バックプロパゲーション機能を実装したいのですが。しかし、そのための最も効率的な方法はわかりません。 現在、私は以下を使用signal.fftconvolveしています: 転送ステップでは、フィルターを畳み込み、カーネルがすべてのフィルターを介して転送します。 バックプロパゲーションステップでは、派生物(FlipAllAxes関数ですべての次元で反転)を配列(https://jefkine.com/general/2016/09/05/backpropagation-in-convolutional-neural-networks/)で畳み込みます。すべてのフィルターとそれらを合計します。私が取る出力は、各フィルターの各導関数で畳み込まれた各画像の合計です。 私は、デリバティブをどのように畳み込むかについて特に混乱しています。以下のクラスを使用してバックプロパゲートすると、ウェイトのサイズが急激に増加します。 微分と出力およびフィルターの畳み込みをプログラムする正しい方法は何ですか? 編集: この論文(FFTによるたたみ込みネットワークの高速トレーニング)によると、これは私がしたいことを正確に実行しようとするものです。 前のレイヤーの導関数は、現在のレイヤーの導関数と重みの畳み込みによって与えられます。 dL / dy_f = dL / dx * w_f ^ T 重みの導関数は、導関数と元の入力の畳み込みの区分的合計です。 dL / dy = dL / dx * x 私が知っている限りでは、これを以下に実装しました。ただし、このレイヤーを使用して作成したネットワークは、トレーニング中に激しい変動を示すため、これは意図した結果を与えていないようです。 import numpy as np from scipy import signal class ConvNDLayer: def __init__(self,channels, kernel_size, dim): self.channels = channels self.kernel_size …