一つ、錬金術の痛み
学術研究であろうと産業上の実装であろうと、現時点では pytorch が錬金術のフレームワークとしてほぼ好まれています。
pytorch の成功は、その簡潔で一貫した API 設計だけでなく、そのエコロジーにおける豊富で強力なモデル ライブラリにもあります。
しかし、異なる pytorch モデル ライブラリによって提供されるトレーニング コードと検証コードは大きく異なることがわかります。
torchvision が提供する公式サンプル コードは、主に train_one_epoch と評価関数であり、多くの依存関数に関連付けられており、それぞれに検出とセグメンテーションのセットが含まれています。
yolo シリーズの主要部分は、ddp モードをサポートするさまざまなスタイルのさまざまなトレーナーですが、それぞれの yolo バージョンは大幅に変更されるため、異なる yolo バージョンを普遍化することが困難になります。
face-hugging トランスフォーマ ライブラリも pytorch_lightning に基づいて独自の Trainer を構築しましたが、pytorch_lightning とは互換性がありません。
非常に有名な Facebook ターゲット検出ライブラリ detectron2 も、モデルをトレーニングするためのグローバル cfg パラメーター設定オブジェクトを備えた独自のトレーナーを構築しました。
よりセマンティック セグメンテーションを使用し、トレーニングと検証用に TrainEpoch と ValidEpoch を設計した、segmentation_models.pytorch ライブラリもあります。
これらのさまざまな pytorch モデル ライブラリを学習して使用するときに、これらのトレーニングと検証に関連するコードを読み、理解し、変更しようとすると、1 万ポイントのダメージを受けました。
設計によっては、十数層のネストがあり、非常にひどいものもあります。また、下線付きのさまざまなプライベート変数があちこちに飛び交う非常に汚い実装もあります。
変更したり、欲しい機能を追加したりするたびに気が遠くなります。
モデルを微調整したいだけなのですが、なぜこれほどゴミコードに悩まされるのでしょうか?
1. ドリームストーブ
このような苦しみのせいで、tensorflow のケラスの美しさが恋しくなります。
keras のコンパイル、フィット、評価の 3 つの組み合わせを覚えていますか? 雲の流れや水の流れのように、すべては人間にとって真に自然なものです。
そして、keras で実装されたモデル ライブラリを見ると、トレーニングと検証でほぼ同じインターフェイスのセットを使用でき、不可解な野生のトレーナーはそれほど多くありません。
pytorch に基づいて、keras と同じくらいシンプルで使いやすいインターフェイスと強力な機能を備えたモデル トレーニング ツールを作成できますが、実装コードは非常に短く、理解しやすく、変更が簡単です。
2020年7月頃にバージョン1.0がリリースされてから、最新のバージョン3.85がリリースされるまで、仕事でツールを使い続け、磨き続け、合計70回以上、ツールの提出や修正を行いました。
最近、丁寧に彫刻してきたこの作品が、ようやく完成に近いものになってきたと思います。
彼女はトーチケラスという美しい名前を持っています。
そう、彼女はトーチの敏捷性とケラスの優雅さを併せ持ち、その美しさは比類のないものなのです~
彼女は私の夢の炉です~
2、デザインコンセプト
torchkeras は、一般的な pytorch モデル トレーニング テンプレート ツールであり、次の目標に従って設計および実装されています。
見栄えが良い(エレガントなコード、美しいログ、組み込みのビジュアライゼーション)
使いやすい(使いやすい、プログレスバー、評価インデックス、早期停止などの一般的な機能をサポート、テンソルボード、wandb コールバック関数などの拡張機能をサポート、マルチ GPU ddp モード トレーニングをサポート)
変更が簡単(変更が簡単、コアコードはモジュール式でわずか約 200 行、豊富な変更ユースケースを提供)
3. 使用方法
トーチケラスをインストールする
pip install torchkeras
torchkeras を使用すると、独自の pytorch モデルのトレーニング ループを作成する必要がなくなります。これを行う必要があるのは 2 つのステップだけです。
(1) モデル構造ネットを作成し、それと損失関数を torchkeras.KerasModel に渡してモデルを構築します。
(2) モデルの Fit メソッドを使用してトレーニング データと検証データをトレーニングします。トレーニング データと検証データは 2 つの DataLoader にカプセル化する必要があります。
コアの使用コードは次のようになります。
import torch
import torchkeras
import torchmetrics
model = torchkeras.KerasModel(net,
loss_fn = nn.BCEWithLogitsLoss(),
optimizer= torch.optim.Adam(net.parameters(),lr = 1e-4),
metrics_dict = {"acc":torchmetrics.Accuracy(task='binary')}
)
dfhistory=model.fit(train_data=dl_train,
val_data=dl_val,
epochs=20,
patience=3,
ckpt_path='checkpoint.pt',
monitor="val_acc",
mode="max",
plot=True
)
jupyter Notebook でトレーニング コードを実行すると、以下のようなトレーニングの視覚化とトレーニング ログの進行状況バーが表示されます。
四、主な特徴
トーチケラスは次の機能をサポートします。これらの機能を安定してサポートする開始バージョン、およびこれらの機能が参照または依存するライブラリのソースを以下の表に示します。
五、基本的な例
次の例は、torchkeras の基本的な例であり、torchkeras の主な機能を示しています。
基本的なトレーニング、wandb を使用した視覚化、wandb を使用したパラメーターの調整、tensorboard を使用した視覚化、マルチ GPU ddp モードのトレーニングなどを含みます。
6つの先進的な事例
以下の例は torchkeras の高度な使用例ですが、入力データ構造が異なるため、一部の例では torchkeras のコア モジュール StepRunner を変更する必要があります。
この変更は実際には非常に簡単で、各モジュールの出力を元の実装形式と一致させるだけで、中間処理ロジックは必要に応じて柔軟に調整できます。
何かをマスターしたい場合はそれを使用し、何かを本当に理解したい場合はそれを変えてみてください。——— アインシュタイン
上記の例に加えて、冒頭で述べた torchvision の検出およびセグメンテーション モデル、huggingface のトランスフォーマー ライブラリ、ultralytics ライブラリのさまざまなモデルなど、他の一般的なモデル ライブラリでも、このテンプレートをトレーニングと微調整に使用できます。 。
信じてください、彼女はあなたの錬金術ライフをもっと幸せにしてくれるでしょう~
公開アカウント アルゴリズム グルメ ハウスの舞台裏は、キーワード: Dream Heart Stoveに返信し、彼女の github 倉庫リンクを取得してください~
使用方法についての質問や改善の提案がある場合は、公式アカウントの背景にあるキーワードに返信できます: add group、add my WeChat for communication。