meowの覚え書き

write to think, create to understand

機械学習のTrainerのクラス図を写経して高解像度にした

f:id:meow_memow:20201010163642p:plain

最近、mediumでWriting a Production-Level Machine Learning Framework: Lessons Learnedという記事を読んだ。
こちらは(PyTorchを使った)機械学習を本番適用する上で心がけるべき6つのポイントを説明した記事である。

その中の1つ"1. Do not reinvent the wheel"で、Trainerの典型的な構成をクラス図(著者いわくhigh-level sketch)としてまとめたものがあるのだが、解像度が低く文字は拡大してやっと読める程度につぶれてしまっていた。
したがって、自分のTrainerに対する知識の整理も込めてこのクラス図をplantumlで写経して、なるべく高解像度な画像した1。なお、元のpumlコードはこちら

コンポネントの位置がオリジナルの画像とずれている理由は、plantumlのコンポネントの位置関係を制御するのが難しかったためである。技術不足で申し訳ない。

EngineクラスがTrainerに当たるものである。論文実装でコードがこの形式で用意されていると嬉しい。 図の中にはPyTorchが提供するクラスもありやや冗長かもしれない。

所感

私は実験でTrainerを作る時は、jupyter notebookで実験したものをリファクタリングする形で作っているが、実験ごとに毎回毎回作ってしまっている。まさしく、元の記事で警告している車輪の再発明状態である。
なので、こういう抽象的な構成のテンプレートコードを持っておいてjupyter notebookのコードをそのテンプレートに適用していったほうが長期的な研究生産性が高まりそうだと思った。世には既にpytorch-lightningみたいな学習ラッパーがあるのでそこら辺を触っていきたい。


  1. なお、この記事トップの画像も同じ画像をアップロードしたのだが、はてなブログ側で勝手に縮小されてしまった。