記録は作業の証

鉄道とコンピュータ

2024-03-10から1日間の記事一覧

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

ソースコード ステップ17 メモリ管理と循環参照 弱参照を使うことで、循環参照を解消し、メモリ使用量を減らす。 循環参照があると、参照カウント方式のメモリ管理では解放が難しいという。ガベージコレクタの方式によっては循環参照になっているオブジェク…

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

ソースコード ステップ14 同じ変数を繰り返し使う 微分を累算して、同じ変数を使っても結果がおかしくならないようにする。 オリジナルのコードにある次のコード片をCommon Lispにどう翻訳するか少し悩んだ。そのままだと(@gradient x)という式があちこちに…

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

ソースコード ステップ11 可変長の引数(順伝播編) 可変長引数を取り扱うため、callやforwardのシグネチャを変更し、関数の入力も出力もリストとなるよう変更する。 総称関数の特性上影響が大きく、コンパイルエラーを参考に直していくことになる。 ステップ1…

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

ソースコード ステップ9 関数をより便利に まず、呼び出し側が毎回gradientに全要素が1の配列を設定しなければならないのを直す。 ユーティリティ関数として次のようなものを定義する。 (defun full-like (array fill-value) (let ((dims (array-dimensions …

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

ソースコード ステップ4 数値微分 Common Lispでは0.942のような浮動小数点数リテラルを読み取ると、デフォルトで単精度浮動小数点数型(single-float)として扱ってしまう。この挙動は (setf *read-default-float-format* 'double-float) という行を挿入すれ…