この記事では主に、機械学習プロジェクトの編成と管理に関する実践的な経験をいくつか紹介します。 パイソン Python は、機械学習プロジェクトの開発に使用される主要な言語の 1 つです。機械学習に使用できる多数のライブラリ/パッケージが含まれています。
ギット Git バージョン管理は、機械学習プロジェクトを整理するのに非常に便利です。 Git は、コードに加えられたすべての変更を追跡するために使用できるツールです。 Git「リポジトリ」は、コード ファイルを含むディレクトリです。 Git はストレージスペースを節約する技術を使用しているため、コードの複数のコピーを保存する代わりに、古いファイルと新しいファイル間の相対的な変更を保存します。 Git を使用すると、最新バージョンのみが存在するように見えるため、コード ファイル ディレクトリをクリーンかつ整理された状態に保つことができます (ただし、いつでも任意のバージョンのコードに簡単にアクセスできます)。ユーザーは、「コミット」を使用してコードへの特定の変更を関連する記述内容とともにバンドルすることで、どのような変更を加えるかを選択できます。 Git リポジトリを使用すると、コードの共有や共同作業も容易になります。全体的に、Git は、「myscriptv1.py」、「dataprocessingv56.py」、「utils_73.py」などの 100 万の異なるバージョンを保持するよりも、古いコードを保存するのに適した方法です。 Git バージョン管理は、GitHub、GitLab、Bitbucket を通じて実装できます。私は GitHub を最もよく使います。 GitHub の使い方は次のとおりです。
myeditedscript.py にコード変更があった場合、次のようにコミットすることでバージョンを管理できます。
アナコンダ Anaconda は、異なる Python バージョンや異なるパッケージ バージョンを含む可能性のあるさまざまな環境の作成をサポートしています。 Anaconda は、依存関係が競合する複数のプロジェクトで作業している場合に特に便利です。 Anaconda の使い方は簡単です: まず、Anacondaをインストールします 次に、環境を作成します。環境には、その環境が含まれるプロジェクトにちなんで名前を付けることをお勧めします。たとえば、プロジェクトがニューラル ネットワークを使用した胸部 X 線分類に関するものであった場合、環境は chestxraynn という名前になります。
環境名を引用符で囲まないようにしてください。そうしないと、引用符文字自体が環境名の一部になります。さらに、Python の任意のバージョンを選択できます。 python3.5である必要はありません。 環境が作成されたら、それをアクティブ化します。 「アクティベーション」とは、単に「環境に配置される」ことを意味し、その環境にインストールされているすべてのソフトウェアを使用できるようになります。 Windows のアクティベーション コマンドは次のとおりです。
Linux/macOS のアクティベーション コマンドは次のとおりです。
「conda install」コマンドを使用して、環境にパッケージをインストールします。 matplotlib のインストールを例に挙げます。
技術的には、conda 環境内で pip を使用してパッケージをインストールすることも可能ですが、問題が発生する可能性があるため、可能であれば避ける必要があります。 Anaconda は、環境内のすべてのバージョンに互換性があることを確認します。その他のコマンドについては、Conda チートシートを参照してください。 他の人のコマンドファイルを直接使用して conda 環境を作成することもできます。 GitHub の github/rachellea/pytorch-computer-vision には、チュートリアル コードを実行するために必要な依存関係を指定する tutorial_environment.yml ファイルがあります。このファイルに基づいて conda 環境を作成するには、Anaconda プロンプトで次のコマンドを実行するだけです。
コード管理: クラスと関数 コード管理は非常に重要です。コードが何千行もあり、ドキュメントがなく、至る所にコード ブロックが繰り返され、一部のコード ブロックが説明なしにコメント アウトされ、さまざまな奇妙な変数名が付けられている場合、それは単なる大惨事です。 Pytorch 実装で通常見られるすべてのコードは整理されており、適切に文書化されています。 長期的には、プロジェクトに高品質のコードを書くと多くの時間を節約できます。高品質なコードの特徴の 1 つは、モジュール内での編成と管理です。 コード管理の提案:
コード管理図 コード管理: ディレクトリ 複数のモジュールを使用してコードを整理し、それらのモジュールをディレクトリに整理します。簡単な例を見てみましょう。 全体的な構成は次のとおりです。
コード管理ディレクトリ図 データセットはこのリポジトリに保存されますが (「train」、「val」、「test」ディレクトリ内の png 画像)、一般にデータセットをリポジトリに置くことはお勧めできません。このリポジトリにデータセットが存在する唯一の理由は、それがデモンストレーション目的で作成された小さなデータセットであるためです。データが非常に小さい場合を除き、リポジトリに格納しないでください。 ファイルのインポート モジュールがそれらのディレクトリからファイルをインポートできるように、各サブディレクトリに init.py という名前の空のファイルが必要であることに注意してください。 awesomecode.py というモジュールが、どのディレクトリにあるかに応じて helpercode.py というモジュールを呼び出す方法は次のとおりです。 ドキュメント ドキュメントを書くのは素晴らしいことです。すべての関数、メソッド、クラスをドキュメント化します。場合によっては、関数が記述される前にドキュメント化します。ドキュメントがコードより長い場合でも問題ありません。十分に明確でないよりも「明確すぎる」方が良いです。 上の画像は、CT ボリュームを表す 3D numpy 配列をランダムに回転させる単純な関数 rand_rotate() です。コメントは、回転ベクトルが (k-1) を使用する理由を説明しているので役に立ちます。これは、選択された k が 1、2、または 3 であり、Python がゼロインデックスであるためです。このような簡単な指示により、後で混乱を防ぐことができます。 データ処理チュートリアルコード内の注記 ドキュメントがあれば、古いコードを確認するときに、コードと関数が何をするのかをすぐに思い出すことができます。ドキュメントは、ユーザーが何か変なものを見つけて変更したいと思ったときに、誤って自分のコードを壊してしまうことを防ぎます。ドキュメント化により、他の人もあなたのコードを理解して使用できるようになります。 変数の命名 常に説明的な変数名を使用してください。 「volumetricattngr_truth」は「truth」よりも適切な変数名です。 行と列を反復処理する場合でも、変数名として「i」と「j」ではなく、「row」と「col」を使用してください。かつて私は、非常に奇妙なバグの追跡に丸一日を費やしましたが、数百行のコードのうちのたった 1 行で「i」と「j」を入れ替えたために 2D 配列を誤って反復処理したことが原因であることがわかりました。これが、1 文字の変数名を使用した最後の例です。 モジュールテスト 多くの人は、研究目的のためだけにコードのテストを書く時間がないと主張します。研究の本質は「正しい答え」が何であるかが分からないということであり、答えを生成したコードが正しいかどうか分からない場合、その答えが正しいことをどうやって確認できるのか、研究コードをテストすることの方が重要だと思います。 コードの単体テストを 1 日かけて書くたびに、いくつかのバグが見つかります。その中には重要でないバグもあれば、非常に重大なバグもあります。ユニットテストを書くと、コード内にバグが見つかります。他の人のコードの単体テストを書くと、そのコードにもバグが見つかるでしょう。 コードの正確性を促進することに加えて、ユニット テストは、一度に多くのことを実行する「God 関数」の作成を抑制することで、適切なコード構成を強化するのに役立ちます。 God 関数は通常、テストするのが大変なので、より小さく管理しやすい関数に分割する必要があります。 少なくとも、複雑なデータ処理やモデル内のテンソルの奇妙な配置など、コードの最も重要な部分を単体テストすることをお勧めします。コードが正しいことを確認することは決して時間の無駄ではありません。 これらの単体テストには、デモンストレーション目的でいくつかの組み込み PyTorch 関数のテストが含まれています。 視覚的エラー修正 特にコンピューター ビジョンでは、視覚化を使用して健全性チェックを実行すると便利です。 Matplotlib は、画像、セグメンテーション プロット、境界線のある画像などを表示するのに最適です。以下は、matplotlib の imshow() 関数を入力画像に適用して生成された視覚化の例です。 Matplotlib 可視化 Seaborn は統計データの視覚化用に設計されています。ヒートマップを作成したり、パフォーマンス メトリックの複雑な視覚化を生成するのに非常に役立ちます。以下は、seaborn で約 1 行のコードで作成できるプロットの例です。 シーボーン視覚化 matplotlib と seaborn はどちらも、入力データが意味をなすかどうか、グラウンド トゥルースが意味をなすかどうか、データ処理が計画どおりに行われなかったかどうか、モデルの出力が意味をなすかどうかなどを即座に示す視覚化を作成するために使用できます。 ユニットテストと視覚化 Demo-0-Unit-Tests-and-Visualization.py は、まず src/unit_tests.py 内のユニット テストを実行し、次に PASCAL VOC 2012 データセットの画像セグメンテーションを視覚化します。 デモの視覚化部分を実行するには、demo-0-Unit-Tests-and-visualization.py を、PASCAL VOC 2012 データセットを保存したコンピューター上のフォルダーに変更します。データセットをダウンロードしたら、視覚化を実行できます。視覚化を実装するコードは loaddataset/custompascal.py にあります。現在、デモ ファイルでは、「imagestovisualize」の合計数は 3 に設定されています。さらに多くの画像を視覚化する場合は、この数をさらに増やして、たとえば 100 にすることができます。 視覚化結果は次のとおりです。 PASCAL VOC 2012データセットからの航空機画像 再サンプリング後の航空機画像 視覚化の結果から、いくつかの有用なことが推測できます。
ターミナルでの可視化 「非対話型環境」(つまり、グラフィカル ユーザー インターフェイスのない端末) にいる場合は、対話型表示をオフにして図を保存し、他の場所で開くことができるようにする必要があります。
Python デバッガー Python デバッガーは、プログラムがクラッシュした時点での変数やオブジェクトの状態を検査し、プログラムがクラッシュした時点でのコード スニペットを実行して、可能な解決策を試すことができる、非常に便利なツールです。 Python デバッガーを使用すると、print ステートメントを使用してデバッグするよりもはるかに効率的であり、何時間もの時間を節約できます。 Python デバッガーを PyTorch と組み合わせて使用して、テンソル、勾配、ログ データフレームなどを検査することもできます。 Python デバッガーを使用してターミナルでスクリプトを対話的に実行するには、次のコマンドを使用します。
上記のコマンドを入力すると、(Pdb) プロンプトが表示されます。続行するには「c」と入力してください。 (これは継続を意味する小文字の c 1 つだけです)。 Python デバッガーを終了するには、「q」(終了を意味する小文字の q) を使用します。完全に終了するには、q を 2 回使用する必要がある場合があります。 プログラムの特定の時点で停止したい場合は、関連するモジュールに pdb をインポートし、停止したい特定の時点で「pdb.set_trace()」を配置します。あるいは、pdb をインポートする手間を省きたい場合は、プログラムを停止する場所で常に「assert False」と入力できます。これにより、指定されたポイントでプログラムが終了することが保証されます (ただし、これは Python デバッガーを使用する正式な方法ではありません)。 Jupyter Notebookを使わない これまでのすべてのセクションを考慮すると、この記事では、機械学習プロジェクト、または数日以上かかるコーディング プロジェクトには Jupyter Notebook を使用しないことを推奨します。 なぜ?
1. コードが整理されるほど (つまり、クラスと関数に細分化されるほど)、Jupyter Notebook のインタラクティブ性は低下します。インタラクティブ性こそが、人々が Jupyter Notebook を好む主な理由です。 Jupyter Notebook の魅力的なインタラクティブ性は、本質的には、高度に構造化され、整理されたコードとは正反対です。
では、Jupyter ノートブックは何に適しているのでしょうか? 考えられる使用例としては、初期のデータ視覚化、宿題、インタラクティブなプレゼンテーションなどがあります。 コーディング標準 役に立つコーディング標準は次の 2 つです。
要約する
レイチェル・リー・バランタイン・ドラエロス |
>>: Google Colab をマスターするための 20 のヒント
[[425799]] Java のガベージ コレクションに関しては、私と同じように、多くの友人が、...
現在、人工知能の応用範囲と深さは絶えず拡大しており、情報インフラの重要な部分になりつつあります。しか...
多くの企業にとっての優先事項は、人間の労働者を AI に置き換えることではなく、人間の能力を増強し、...
[[387639]]人工知能に関するこれらの 8 冊の本は、AI に関連する倫理的問題、AI が雇用...
IDC は最近、世界中の企業による生成 AI サービス、ソフトウェア、インフラストラクチャへの支出が...
インターネット アプリケーションの急速な発展に伴い、分散システムにおけるキャッシュが重要な役割を果た...
スマート シティでは、一部の AI 駆動型システムは統合にコストがかかったり、実装前に複数の規制に準...
中国の自動運転は新たな進歩を遂げ、無人運転の時代が到来した。 9月15日、百度はCCTVニュースと提...
ハーバード・ビジネス・レビューが実施した調査によると、販売に人工知能技術を活用する企業は、潜在顧客を...
[51CTO.comからのオリジナル記事] 突然の流行に直面して、国民は情報の適時性、透明性、伝達効...