これは非公式の PyTorch ガイドですが、この記事では PyTorch フレームワークを使用した 1 年以上の経験、特にディープラーニング関連の作業に最適なソリューションを開発するために使用した経験をまとめています。私たちが共有する経験は、主に研究と実践の観点からのものであることにご注意ください。 これは作業中のプロジェクトであり、他の読者がドキュメントを改善することを歓迎します。 https://github.com/IgorSusmelj/pytorch-styleguide. このドキュメントは 3 つの主要な部分で構成されています。まず、この記事では Python で最も一般的なツールを簡単に一覧にします。次に、この記事では、PyTorch を使用する際のヒントと提案をいくつか紹介します。 *** では、ワークフローの改善に役立った他のフレームワークを使用した洞察と経験をいくつか共有します。 1. Python機器の在庫 1. Python 3.6以上を使用することをお勧めします 私たちの経験に基づいて、簡潔なコードを簡単に記述できる次の機能があるため、Python 3.6 以上を使用することをお勧めします。
2. Python スタイルガイド 私たちは Google の Python プログラミング スタイルに従うように努めています。 Google が提供する優れた Python コーディング スタイル ガイドをご覧ください。 アドレス: https://github.com/google/styleguide/blob/gh-pages/pyguide.md。 ここでは、最も一般的に使用される命名規則の概要を示します。 3. 統合開発環境 一般的には、Visual Studio や PyCharm などの統合開発環境を使用することをお勧めします。 VS Code は比較的軽量なエディターで構文の強調表示と自動補完を提供しますが、PyCharm にはリモート クラスター タスクを処理するための高度な機能が多数あります。 4. Jupyter Notebook と Python スクリプト 一般的に、最初の調査や新しいモデルやコードを試す場合は、Jupyter Notebook を使用することをお勧めします。より大きなデータセットでモデルをトレーニングする場合は、再現性がより大きなデータセットでより重要になるため、Python スクリプトを使用する必要があります。 次のワークフローを採用することをお勧めします。
5.常設図書館を開設する よく使用されるライブラリは次のとおりです。 6. ファイルの構成 すべてのレイヤーとモデルを同じファイルに置かないでください。最善のアプローチは、最終的なネットワークを別のファイル (networks.py) に分離し、レイヤー、損失関数、およびさまざまな操作をそれぞれのファイル (layers.py、losss.py、ops.py) に保存することです。結果として得られるモデル (1 つ以上のネットワークで構成) は、モデルにちなんで命名され (例: yolov3.py、DCGAN.py)、個々のモジュールを参照する必要があります。 メイン プログラムと個々のトレーニングおよびテスト スクリプトでは、モデル名を含む Python ファイルをインポートするだけで済みます。 2. PyTorchの開発スタイルとテクニック ネットワークをより小さな再利用可能な部分に分解することを提案します。 nn.Module ネットワークには、さまざまな操作やその他の構成要素が含まれています。損失関数も nn.Module にラップされているため、ネットワークに直接統合できます。 nn.Module を継承するクラスには、各レイヤーまたは操作の順方向伝播を実装する「forward」メソッドが必要です。 nn.module は、「self.net(input)」を通じて入力データを処理できます。ここでは、オブジェクトの「call()」メソッドが直接使用され、入力データがモジュールに渡されます。
1. PyTorch環境におけるシンプルなネットワーク 単一の入力と出力を持つ単純なネットワークは、次のパターンを使用して実装できます。
以下の点にご注意ください。
2. PyTorch 環境におけるシンプルな残差ネットワーク
ここでは、ResNet モジュールのスキップ接続がフォワード パスで直接実装され、PyTorch はフォワード パス中に動的な操作を許可します。 3. PyTorch における複数の出力を持つネットワーク 複数の出力を持つネットワーク(たとえば、事前トレーニング済みの VGG ネットワークを使用して知覚損失を構築する)の場合、次のパターンを使用します。
以下の点にご注意ください。
4. カスタム損失関数 PyTorch にはすでに多数の標準損失関数がありますが、独自の損失関数を作成する必要がある場合もあります。これを行うには、別の「losses.py」ファイルを作成し、「nn.Module」を拡張してカスタム損失関数を作成する必要があります。
5. ***トレーニングモデルのコード構造 トレーニング *** コード構造では、次の 2 つのモードを使用する必要があります。
3. PyTorchのマルチGPUトレーニング PyTorch には複数の GPU を使用したトレーニング用の 2 つのモードがあります。 私たちの経験では、どちらのモデルも効果的です。ただし、最初のアプローチの方が結果が良く、必要なコードも少なくなります。 2 番目のアプローチでは GPU 間の通信が少なくなるため、パフォーマンス上の利点がわずかに得られるようです。 1. 各ネットワーク入力バッチを分割する 最も一般的なアプローチは、すべてのネットワーク入力を異なるデータ バッチに直接分割し、各 GPU に割り当てることです。 このように、バッチサイズが 64 のモデルを 1 つの GPU で実行すると、2 つの GPU で実行すると各バッチのサイズは 32 になります。このプロセスは、nn.DataParallel(model) ラッパーを使用して自動化できます。 2. すべてのネットワークをスーパーネットワークにパックし、入力バッチを分割する このモードは一般的には使用されません。次のリポジトリには、このメソッドの実装を含む Nvidia の pix2pixHD 実装が示されています。 アドレス: https://github.com/NVIDIA/pix2pixHD 4. PyTorch ですべきこと、すべきでないこと 1. 「nn.Module」の「forward」メソッドでNumpyコードを使用しない Numpy は CPU 上で実行されるため、Torch コードよりも遅くなります。 torch の開発思想は numpy と似ているため、Numpy のほとんどの機能は PyTorch でもすでにサポートされています。 2. DataLoaderをメインプログラムコードから分離する データをロードするためのワークフローは、メインのトレーニング コードとは別にする必要があります。 PyTorch は、メインのトレーニング プロセスに干渉することなく、より効率的にデータをロードするために「バックグラウンド」プロセスを使用します。 3. 各ステップで結果を記録しない 通常、モデルを数千ステップにわたってトレーニングします。したがって、計算オーバーヘッドを削減するには、n ステップごとに損失やその他の計算結果を記録すれば十分です。特に、トレーニング中に中間結果を画像として保存するのは非常にコストがかかります。 4. コマンドラインパラメータの使用 コードの実行時に使用されるパラメータ (バッチ サイズ、学習率など) を設定するには、コマンド ライン引数を使用すると非常に便利です。 「parse_args」から受け取った辞書 (dict データ) を直接出力する、簡単な実験的な引数追跡メソッド:
5. 可能であれば、「.detach() を使用」を使用してテンソルを計算グラフから解放します。 自動微分化を実装するために、PyTorch はテンソルに関係するすべての演算を追跡します。不要な操作が記録されないようにするには、「.detach()」を使用してください。 6. スカラーテンソルを出力するには「.item()」を使用する 変数を直接印刷できます。ただし、「variable.detach()」または「variable.item()」を使用することをお勧めします。 PyTorch の以前のバージョン (< 0.4) では、変数内のテンソル値にアクセスするには「.data」を使用する必要がありました。 7. 「nn.Module」の「forward」メソッドの代わりに「call」メソッドを使用する 次の GitHub の問題が指摘しているように、2 つのアプローチはまったく同じではありません。 https://github.com/IgorSusmelj/pytorch-styleguide/issues/3
オリジナルリンク: https://github.com/IgorSusmelj/pytorch-styleguide [この記事は51CTOコラム「Machine Heart」、WeChatパブリックアカウント「Machine Heart(id:almosthuman2014)」によるオリジナル翻訳です] この著者の他の記事を読むにはここをクリックしてください |
<<: AI専門家バターフィールド氏:33カ国が統一AI標準を採用
機械学習 (ML) とディープラーニング (DL) の技術を包括する用語である人工知能 (AI) は...
人工知能は、コンピュータサイエンス業界のトップテクノロジーの一つとして、1956年にダートマス会議で...
[[417840]]運転支援機能がまた事故を起こした。昨日、「Meiyihao」という公開アカウン...
「機械学習」という言葉には魔法のような雰囲気があります。機械学習は一般に一般の人々に受け入れられてい...
近年、モノのインターネット、クラウドコンピューティング、人工知能などの新世代技術が急速に発展し、特に...
Intel は最近、第 10 世代 Core プロセッサが、スループット、LGA ソケットのスケーラ...
職場にソフトウェア ロボットや人工知能 (AI) が導入されると考えると、一部の労働者は不安を感じる...
[[342701]] スマートホーム革命はかなり前から本格化しています。住宅所有者はデータと IoT...
[[239842]]モザイクといえば、多くのオタクがそれに腹を立てていると思います。1、2時間かけ...
通常の「道路の汚れ」でも、インテリジェントな自動運転車を混乱させ、1 秒以内に制御を失い車線から外れ...
モノのインターネット (IoT) や人工知能 (AI) について聞いたことがあると思います。しかし、...
[[388190]] • 食糧需要が増加するにつれて、世界は水の使用を管理する必要があります。 • ...