錬金術師よ、ここはあなたの夢の愛炉ですか?

一つ、錬金術の痛み

学術研究であろうと産業上の実装であろうと、現時点では 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 万ポイントのダメージを受けました。

設計によっては、十数層のネストがあり、非常にひどいものもあります。また、下線付きのさまざまなプライベート変数があちこちに飛び交う非常に汚い実装もあります。

変更したり、欲しい機能を追加したりするたびに気が遠くなります。

モデルを微調整したいだけなのですが、なぜこれほどゴミコードに悩まされるのでしょうか?

02009be0a81f7c8456c4fd92b1797d97.png

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 でトレーニング コードを実行すると、以下のようなトレーニングの視覚化とトレーニング ログの進行状況バーが表示されます。

c5c6afdbe98315b05d5f8149e34c43d2.png

30dbdce0c53f95dae6fc4395b14ec328.png

四、主な特徴

トーチケラスは次の機能をサポートします。これらの機能を安定してサポートする開始バージョン、およびこれらの機能が参照または依存するライブラリのソースを以下の表に示します。

7d4c8109ef47a7ab8c0390406504ea9c.png

五、基本的な例

次の例は、torchkeras の基本的な例であり、torchkeras の主な機能を示しています。

基本的なトレーニング、wandb を使用した視覚化、wandb を使用したパラメーターの調整、tensorboard を使用した視覚化、マルチ GPU ddp モードのトレーニングなどを含みます。

bbef422f3cf2692fba408a0185510ed5.png

6つの先進的な事例

以下の例は torchkeras の高度な使用例ですが、入力データ構造が異なるため、一部の例では torchkeras のコア モジュール StepRunner を変更する必要があります。

この変更は実際には非常に簡単で、各モジュールの出力を元の実装形式と一致させるだけで、中間処理ロジックは必要に応じて柔軟に調整できます。

ab410fad138ffbc68fe0dc68a63f8109.png

何かをマスターしたい場合はそれを使用し、何かを本当に理解したい場合はそれを変えてみてください。——— アインシュタイン

上記の例に加えて、冒頭で述べた torchvision の検出およびセグメンテーション モデル、huggingface のトランスフォーマー ライブラリ、ultralytics ライブラリのさまざまなモデルなど、他の一般的なモデル ライブラリでも、このテンプレートをトレーニングと微調整に使用できます。 。

信じてください、彼女はあなたの錬金術ライフをもっと幸せにしてくれるでしょう~

公開アカウント アルゴリズム グルメ ハウスの舞台裏は、キーワード: Dream Heart Stoveに返信し、彼女の github 倉庫リンクを取得してください~

使用方法についての質問や改善の提案がある場合は、公式アカウントの背景にあるキーワードに返信できます: add group、add my WeChat for communication。

おすすめ

転載: blog.csdn.net/Python_Ai_Road/article/details/130758185