記録は作業の証

鉄道とコンピュータ

ゼロから作るDeep LearningをCommon Lispで書き直す(ステップ11~13)

ソースコード

ステップ11 可変長の引数(順伝播編)

可変長引数を取り扱うため、callforwardシグネチャを変更し、関数の入力も出力もリストとなるよう変更する。 総称関数の特性上影響が大きく、コンパイルエラーを参考に直していくことになる。

ステップ12 可変長の引数(改善編)

Common Lispの関数は、仮引数リストの中で&restを使うことで可変長引数を受け取れるようになる。 forwardは総称関数として実装しているので、すべてのクラスで同じシグネチャにしなければならない。 オリジナルを見ると、仮引数リストが異なる同名のメソッドが定義されており、これでも問題ないところに違いを感じた。 apply関数を使って、リストをアンパッキングし、可変長の引数を渡すようにする。

ステップ13 可変長の引数(逆伝播編)

<variable>クラスのbackwardメソッドを直し、可変長引数に対応できるようにする。 また、<square>クラスも可変長引数に対応させる。だんだんややこしいコードになってきた。