9 / 24 · 概念
直接畳み込みの参照モデル
入力[2,3]、重み[4,−1]、バイアス1で、入力チャネルごとにバイアスを加えるとどの誤結果になりますか。
レッスンは無料で読めます。受講登録すると進捗を保存できます。
確認しやすい参照モデルを優先する
正解モデルは速度より見える契約を優先します。出力チャネル、出力行、出力列を反復し、その中で入力チャネルとカーネル行・列を縮約します。各入力座標を計算し、範囲外にはゼロを供給します。これにより最初の誤出力と、厳密にどの項が違うかが分かります。ハードウェアの最適化したループ順を模倣する必要はありません。
各出力につき1回、アキュムレータをb[m]で初期化します。縮約内で加えるとバイアスを繰り返します。整数モデルのxとwは中心化コードで、バイアスは積のスケールを使います。
複数チャネルの計算例
2と3を持つ2個の1×1入力チャネルを使います。出力チャネル0の重みは[4,−1]、バイアス1で、1+8−3=6です。出力チャネル1は重み[−2,5]、バイアス−1で、−1−4+15=10です。共有アキュムレータは最初の結果を残さず、第2出力を独立に開始する必要があります。
入力[1,2,3;4,5,6;7,8,9]、カーネル[1,2;3,4]の期待値は[37,47;67,77]です。最初の記録する積は1,4,12,20、次は2,6,15,24です。手計算した位置を確認してください。最終値だけでは相殺する誤りを隠すことがあります。
直接モデルを別構造のパッチと内積のモデルと比較します。両者が同じアドレス関数を共有すると同じバグを共有し得ます。独立構造と手計算例を組み合わせます。乱数シードは再現可能にし、失敗テンソルを残します。数値の失敗箇所を絞るため、変換前のアキュムレータと最終出力コードの両方を比較します。
model.mjsは暗黙の1バッチでX[C][H][W]、W[M][C/G][R][S]を受け入れます。長方形テンソル、チャネル適合、グループを検査します。フレームワークモデルはインポートしません。全ゼロ例でなく、異なる値、負数、非対称な重みを使います。この教材モデルの制限を記録し、規約をONNX Convと比較します。
自分で考えてみましょう
入力[2,3]、重み[4,−1]、バイアス1で、入力チャネルごとにバイアスを加えるとどの誤結果になりますか。
解説を見る
正解は1+8−3=6です。バイアスを2回加えると8−3+2=7になります。チャネル縮約の外でバイアスを初期化します。