コード実行手順書

コーディング課題:MNISTデータセットに対するディープラーニング学習と評価

1. ドキュメント作成者

ギマレンス ゴンサルベス ダニロ(daniloguimaraes71@gmail.com)

2. 改訂履歴

  • 1.0:
    • 作成日時: 2023-08-25 18:48:45
    • 更新内容: 初版作成

3. このドキュメントの目次

4. このドキュメントの目的・概要

このドキュメントは、MNISTデータセットに対するディープラーニングの学習と評価の手順について説明します。プロジェクトの実行には、コーディング課題として提供されたソースコードを使用します。手順に従って、データの準備、モデルの訓練、テスト、評価を進めることができます。

このドキュメントでは、以下の内容について説明します。

  • 前提条件:ドキュメントの利用に必要な前提条件を説明します。
  • 準備:コンフィグファイルの準備方法について詳細を説明します。
  • 手順:訓練コードの実行、テストコードの実行、評価コードの実行手順を段階的に示します。
  • 出力の詳細:ログの確認方法や出力データフォーマットに関する情報を提供します。

プロジェクトの目的は、MNISTデータセットを使用してディープラーニングモデルを訓練し、その性能を評価することです。このドキュメントを通じて提供される手順とガイドラインに従いながら、コードの実行と評価を行うことができます。プロジェクトの成功基準や評価方法を理解し、モデルの訓練と評価に関する作業をスムーズに進めることができます。

また、このドキュメントはコーディング課題に取り組む際に参考となる情報や手順を提供するためのものです。プロジェクトの実行に必要な情報を整理し、ステップバイステップのガイドを提供することで、プロジェクトの進行を支援します。

5. 前提条件

このドキュメントを効果的に活用するには、以下の前提条件を満たしていることが必要です。

  • 環境構築:ソースコードと一緒に提供される環境構築手順書.mdファイルに記載されているライブラリのインストール方法や設定を行います。

  • インターネット接続: MNISTデータセットのダウンロードにインターネット接続が必要です。

  • ターミナル: コマンドラインインターフェースを使用してソースコードの実行とプロジェクトの操作を行うため、ターミナルを利用できる必要があります。

  • ソースコード: プロジェクトのソースコードが提供されている必要があります。ソースコードはプロジェクトの機能を実行するための基盤となります。

  • コンフィグファイル: プロジェクトの設定を調整するためのコンフィグファイル(config.json)が必要です。

これらの前提条件を確認してから、ドキュメント内の手順に従ってプロジェクトを進めてください。詳細な手順と情報は後続のセクションで提供されます。

注:_ 完全な環境構築ガイドについては、ソースコードと一緒に提供される「環境構築」ファイルをご確認ください。

6. 準備

このセクションでは、プロジェクトを実行するために必要な準備作業について説明します。

  • モデルの訓練を開始する前に、ハイパーパラメータを定義する必要があります。以下の手順に従って、config.jsonで設定される訓練のハイパーパラメータを適切に変更してください。

6.1.コンフィグファイルの設定

  • 環境構築時に設定したプロジェクトフォルダでconfig/config.jsonファイルをテキストエディタで開きます。
  • 以下のパラメーターを調整します。各設定はプロジェクトの要件に合わせて調整します。
{
    "batch_size": [バッチサイズ],
    "learning_rate": [学習率],
    "epochs": [エポック数],
    "validation_split": [バリデーション分割率],
    "log_dir": "[ログの保存先]",
    "model_save_dir": "[モデルの保存先]"
}

パラメーターの詳細:

パラメタ名 説明
batch_size バッチサイズ:訓練やテスト時に使用するバッチのサイズ。
learning_rate 学習率:モデルの重みを更新する際のステップサイズ。
epochs エポック数:訓練データ全体を何回使用するかを指定する回数。
validation_split バリデーション分割率:訓練データを訓練セットとバリデーションセットに分割する割合。
log_dir ログの保存先:訓練の進捗や結果を保存するログファイルのディレクトリ。
model_save_dir モデルの保存先:訓練後のモデルの重みを保存するディレクトリ。
  • 付録 ターミナルからconfig.jsonを編集する場合、以下の手順を参考にしてください。

    1. ターミナルを開いて、プロジェクトフォルダに移動します。プロジェクトフォルダのパスは以下のコマンドで確認できます:
    $ cd [プロジェクトフォルダのパス]

    プロジェクトフォルダのパスに移動することで、config.json ファイルが存在するディレクトリに移動します。

    1. vim エディタを使用して config.json ファイルを開きます:
    $ vim config/config.json
    1. vim エディタが開かれると、ファイルの内容が表示されます。編集モードに入るために i キーを押します。 カーソルを移動させて、必要な設定を変更します。変更が完了したら、Esc キーを押してコマンドモードに戻ります。

    2. 編集を保存してエディタを終了します:

    • :w と入力して Enter キーを押すことで保存します。
    • :q と入力して Enter キーを押すことで終了します。
    • もし変更内容を保存せずに終了したい場合は、:q! と入力して Enter キーを押します。
    1. vim エディタを終了してターミナルに戻ります。

これによって、config.json ファイルの設定を編集することができます。

7. 手順

このセクションでは、MNIST認識のディープラーニングモデルを訓練し、テスト、評価するための手順を説明します。本章は以下の3つのサブセクションに分かれています。。

  • 7.1. 訓練コードの実行: ここでは、ディープラーニングモデルの訓練を行うための手順を説明します。MNISTデータセットを使用してモデルを訓練するためのコードの実行方法が解説されています。

  • 7.2. テストコードの実行: このセクションでは、訓練済みモデルをテストするための手順を説明します。テストデータを使用してモデルの性能を評価するためのコードの実行方法が詳しく説明されています。

  • 7.3. 評価コードを実行: 訓練とテストが終了した後、モデルの評価を行うための手順について説明します。Jupyter Notebookを使用して訓練およびテストの結果を視覚化し、モデルの性能を分析する方法が解説されています。

注:_ 本章で紹介されるターミナルコマンドは、プロジェクトフォルダ内で実行する必要があります。プロジェクトフォルダ内に移動するために、以下のコマンドを使用してください。

$ cd [プロジェクトフォルダのパス]

7.1. 訓練コードの実行

1. 訓練コードの実行

$ python3 main.py --mode train
  • 訓練中にはログ情報がターミナルに表示されます。
  • データセットがダウンロードされていない場合、訓練の前に自動的にダウンロードされます。
  • 訓練の進行状況や各エポックごとの訓練損失が表示されます。
  • 出力例)
    2023-08-26 10:13:10,322 [INFO] Device: cpu
    2023-08-26 10:13:10,323 [INFO] Training started...
    2023-08-26 10:13:18,166 [INFO] Epoch [1/10], Train Loss: 0.4247, Validation Loss: 0.2618
    2023-08-26 10:13:26,107 [INFO] Epoch [2/10], Train Loss: 0.2145, Validation Loss: 0.1964
    2023-08-26 10:13:34,045 [INFO] Epoch [3/10], Train Loss: 0.1584, Validation Loss: 0.1517
    2023-08-26 10:13:42,055 [INFO] Epoch [4/10], Train Loss: 0.1286, Validation Loss: 0.1436
    2023-08-26 10:13:50,054 [INFO] Epoch [5/10], Train Loss: 0.1080, Validation Loss: 0.1283
    2023-08-26 10:13:58,207 [INFO] Epoch [6/10], Train Loss: 0.0943, Validation Loss: 0.1170
    2023-08-26 10:14:06,347 [INFO] Epoch [7/10], Train Loss: 0.0814, Validation Loss: 0.1210
    2023-08-26 10:14:14,347 [INFO] Epoch [8/10], Train Loss: 0.0729, Validation Loss: 0.1039
    2023-08-26 10:14:22,293 [INFO] Epoch [9/10], Train Loss: 0.0675, Validation Loss: 0.1379
    2023-08-26 10:14:30,168 [INFO] Epoch [10/10], Train Loss: 0.0582, Validation Loss: 0.1010
    2023-08-26 10:14:30,169 [INFO] Training completed.
    2023-08-26 10:14:30,169 [INFO] Model weights of version 6 saved in path ../outputs/saved_models/6/

2. 訓練結果の保存パス

  • 訓練が完了すると、訓練済みモデルが以下のディレクトリに保存されます。

    [プロジェクトフォルダのパス]/outputs/saved_models/[モデルバージョン]
    
  • 訓練損失ファイルtraining_losses.jsonとバリデーション損失ファイルvalidation_losses.jsonが以下のディレクトリに保存されます。

    [プロジェクトフォルダのパス]/outputs/saved_models/[モデルバージョン]/metrics/
    

    注:_ 詳細な出力内容やログのフォーマットについて、8. 出力の詳細をご確認ください。

7.2. テストコードの実行

1. テストコードの実行

  • 特定のモデルバージョンを選択してテストする場合:
    $ python3 main.py --mode test --model_version [モデルバージョン]
  • 最新のモデルバージョンを使用してテストする場合:
    $ python3 main.py --mode test
  • 出力例)
    2023-08-24 17:49:46,161 [INFO] Testing started...
    2023-08-24 17:49:46,161 [INFO] Model Version 1
    2023-08-24 17:49:47,790 [INFO] Model epoch 1 - Test Accuracy: 0.9273 Test loss: 0.2481
    2023-08-24 17:49:49,081 [INFO] Model epoch 2 - Test Accuracy: 0.9519 Test loss: 0.1568
    2023-08-24 17:49:50,391 [INFO] Model epoch 3 - Test Accuracy: 0.9572 Test loss: 0.1419
    2023-08-24 17:49:51,673 [INFO] Model epoch 4 - Test Accuracy: 0.9633 Test loss: 0.1167
    2023-08-24 17:49:52,948 [INFO] Model epoch 5 - Test Accuracy: 0.9647 Test loss: 0.1121
    2023-08-24 17:49:54,233 [INFO] Model epoch 6 - Test Accuracy: 0.9676 Test loss: 0.1091
    2023-08-24 17:49:55,495 [INFO] Model epoch 7 - Test Accuracy: 0.9679 Test loss: 0.0958
    2023-08-24 17:49:56,757 [INFO] Model epoch 8 - Test Accuracy: 0.9719 Test loss: 0.0901
    2023-08-24 17:49:58,020 [INFO] Model epoch 9 - Test Accuracy: 0.9716 Test loss: 0.0925
    2023-08-24 17:49:59,281 [INFO] Model epoch 10 - Test Accuracy: 0.9722 Test loss: 0.0965
    2023-08-24 17:49:59,281 [INFO] Testing for all weights completed.

2. テスト結果の保存パス

  • テスト損失ファイルtest_losses.jsonとテスト精度ファイルtest_accuracy.jsonが以下のディレクトリに保存されます。

    [プロジェクトフォルダのパス]/outputs/saved_models/[モデルバージョン]/metrics/`
    

    注:_ 詳細な出力内容やログのフォーマットについて、8. 出力の詳細をご確認ください。

7.3. 評価コードを実行

1. Jupyter Notebook を起動:

  • ターミナルで、以下のコマンドを実行して Jupyter Notebook を起動します。
    $ jupyter notebook

2. ブラウザでアクセス:

  • Jupyter Notebook を起動した後、デフォルトのウェブブラウザが自動的に開かれ、Jupyter のダッシュボードが表示されます。ダッシュボードからNotebookファイルのevaluation_mnist.ipynbをダブルクリックし、Notebookを開きます。

  • 例)

drawing

3. 評価するモデルのバージョンを選択する test_model_version 変数は、モデルバージョンを指定するための入力として使用されます。この変数には3つの異なる形式が有効です。

  • 'experimentresult': 本プロジェクト作成者による実験結果です。experimentresultの実験について、本Notebookにグラフと考察が記載されています。 実験の出力はパスの./outputs/saved_models/experimentresultに入り、ログはoutputs/logs/output_experiment.logに入っています。

  • 'latest': 最新のモデルバージョンを使用するための指定です。

  • 数値文字列(例: '1'、'2'、'10' など): 指定したモデルバージョン番号を使用するための指定です。

  • 例)

drawing

4. コードセルの実行:

  • 自動的に新しいタブでNotebookが開かれます。順番にセルを選択し、Shift キーを押しながら Enter キーを押すと、セルが実行されます。
  • セルの評価するモデルのバージョンを選択で評価するモデルを指定します。
  • 例)

drawing

5. セルの実行結果を確認:

  • セル内のコードが実行された後、その実行結果がセルの下に表示されます。出力結果やエラーメッセージが表示されることがあります。

  • 例)

drawing

6. ノートブックの保存と閉じる: 作業が終わったら、ノートブックを保存しましょう。

  • ノートブックの上部メニューから「File」をクリックし、保存オプションを選択します。

  • ノートブックを閉じるには、「File」から「Close and Halt」を選択します。

  • 例)

drawing

7. シャットダウンと終了: Jupyter Notebook を終了するには、ターミナルで Ctrl + C を押して、Notebook サーバーを停止します。

8. 出力の詳細

このセクションでは、プログラムの実行結果と生成される出力データの詳細について説明します。プロジェクトの進捗、モデルの評価、およびトラブルシューティングに役立つ情報がここに含まれています。以下のフォルダツリーは、出力フォルダ内のファイルとディレクトリの構造を示しています。

出力保存ディレクトリ構成例)

[プロジェクトフォルダのパス]
└── outputs
   ├── logs
   │   └── output.log
   └── saved_models
       └── 1
           ├── metrics
           │   ├── test_accuracy.json
           │   ├── test_losses.json
           │   ├── training_losses.json
           │   └── validation_losses.json
           ├── model_version_1_epoch1_2023-08-23_17-01-14.pt
           ├── model_version_1_epoch2_2023-08-23_17-01-22.pt
           ├── model_version_1_epoch3_2023-08-23_17-01-30.pt
           ├── model_version_1_epoch4_2023-08-23_17-01-38.pt
           ├── model_version_1_epoch5_2023-08-23_17-01-45.pt
           ├── model_version_1_epoch6_2023-08-23_17-01-53.pt
           ├── model_version_1_epoch7_2023-08-23_17-02-01.pt
           ├── model_version_1_epoch8_2023-08-23_17-02-09.pt
           ├── model_version_1_epoch9_2023-08-23_17-02-16.pt
           └── model_version_1_epoch10_2023-08-23_17-02-24.pt

本章は以下の2つのサブセクションに分かれています。

  • 8.1. ログの確認方法: プログラムの実行中に生成されるログファイルに含まれる情報の解釈と利用方法について説明します。

  • 8.2. 出力データフォーマット: 生成される出力データのフォーマットと内容について説明します。モデルウェイトの保存方法やメトリクスファイルの意味について理解するためのガイドを提供します。

8.1. ログの確認方法

  • 訓練およびテストの実行中に生成されるログは、outputs/logs/output.logファイルに保存されます。
  • 以下のコマンドを使用して、ターミナルでログを表示できます。
$ cat outputs/logs/output.log
  • ログは実行の詳細な情報を提供し、エラーや問題のトラブルシューティングに役立ちます。

以下の表は、ログファイル(outputs/logs/output.log)に含まれる情報の一般的な内容を示しています。ログは、実行中の詳細情報やトラブルシューティングの際に参考になる情報が含まれています。

情報の種類 説明
エポックごとの進行状況 各エポックでの訓練とテストの進行状況、精度、損失などの情報が表示されます。
モデルの保存と読み込み モデルの保存と読み込みに関する情報が表示され、特定のエポックでのモデルの保存場所やファイル名が記録されます。
エラーメッセージや警告 実行中に発生したエラーメッセージや警告が表示され、問題の特定と解決に役立つ情報が提供されます。
実行中のプロセスに関する情報 実行中のさまざまなプロセスに関する情報が表示されます。これには、データの読み込み、モデルの訓練などが含まれます。

ログファイルの中身の例)

2023-08-26 10:13:10,322 [INFO] Device: cpu
2023-08-26 10:13:10,323 [INFO] Training started...
2023-08-26 10:13:18,166 [INFO] Epoch [1/10], Train Loss: 0.4247, Validation Loss: 0.2618
2023-08-26 10:13:26,107 [INFO] Epoch [2/10], Train Loss: 0.2145, Validation Loss: 0.1964
2023-08-26 10:13:34,045 [INFO] Epoch [3/10], Train Loss: 0.1584, Validation Loss: 0.1517
2023-08-26 10:13:42,055 [INFO] Epoch [4/10], Train Loss: 0.1286, Validation Loss: 0.1436
2023-08-26 10:13:50,054 [INFO] Epoch [5/10], Train Loss: 0.1080, Validation Loss: 0.1283
2023-08-26 10:13:58,207 [INFO] Epoch [6/10], Train Loss: 0.0943, Validation Loss: 0.1170
2023-08-26 10:14:06,347 [INFO] Epoch [7/10], Train Loss: 0.0814, Validation Loss: 0.1210
2023-08-26 10:14:14,347 [INFO] Epoch [8/10], Train Loss: 0.0729, Validation Loss: 0.1039
2023-08-26 10:14:22,293 [INFO] Epoch [9/10], Train Loss: 0.0675, Validation Loss: 0.1379
2023-08-26 10:14:30,168 [INFO] Epoch [10/10], Train Loss: 0.0582, Validation Loss: 0.1010
2023-08-26 10:14:30,169 [INFO] Training completed.
2023-08-26 10:14:30,169 [INFO] Model weights of version 6 saved in path ../outputs/saved_models/6/
2023-08-26 10:15:14,229 [INFO] Testing started...
2023-08-26 10:15:14,229 [INFO] Model Version 6
2023-08-26 10:15:15,500 [INFO] Model epoch 1 - Test Accuracy: 0.9291 Test loss: 0.2395
2023-08-26 10:15:16,759 [INFO] Model epoch 2 - Test Accuracy: 0.9435 Test loss: 0.1797
2023-08-26 10:15:18,009 [INFO] Model epoch 3 - Test Accuracy: 0.9537 Test loss: 0.1439
2023-08-26 10:15:19,257 [INFO] Model epoch 4 - Test Accuracy: 0.9583 Test loss: 0.1330
2023-08-26 10:15:20,513 [INFO] Model epoch 5 - Test Accuracy: 0.9620 Test loss: 0.1243
2023-08-26 10:15:21,762 [INFO] Model epoch 6 - Test Accuracy: 0.9663 Test loss: 0.1175
2023-08-26 10:15:23,016 [INFO] Model epoch 7 - Test Accuracy: 0.9636 Test loss: 0.1142
2023-08-26 10:15:24,264 [INFO] Model epoch 8 - Test Accuracy: 0.9705 Test loss: 0.0991
2023-08-26 10:15:25,517 [INFO] Model epoch 9 - Test Accuracy: 0.9570 Test loss: 0.1352
2023-08-26 10:15:26,767 [INFO] Model epoch 10 - Test Accuracy: 0.9721 Test loss: 0.0963
2023-08-26 10:15:26,768 [INFO] Testing for all weights completed.

8.2 出力データフォーマット

このセクションでは、プログラムの実行結果および生成されるメトリクスファイルの詳細について説明します。これにより、モデルの性能評価や進捗状況の確認が容易になります。

8.2.1. モデルウェイト

訓練およびテストの結果として、訓練済みのモデルが自動的に保存されます。これらのモデルは、各エポックの終了後に生成され、学習中のモデル状態を反映しています。

8.2.1.1. モデルウェイトの保存パス

モデルウェイトの保存場所は、以下のディレクトリ内です。

outputs/saved_models/[モデルバージョン]

8.2.1.2. モデルウェイト命名規則

生成される各モデルファイルは、モデルのバージョン、エポック番号、および保存日時に基づいた命名規則に従います。以下の表は、モデルファイルの命名規則の例を示しています。

ファイル名
model_version_[モデルバージョン]epoch[エポック番号][日付]_[時刻].pt model_version_1_epoch1_2023-08-18_17-06-18.pt

8.2.2. メトリクスファイル

訓練およびテストのメトリクス(損失値と精度)は、各エポックごとに計算され、メトリクスファイルに保存されます。これにより、モデルの学習や評価の進行状況を可視化できます。

8.2.2.1. モデルの保存パス

メトリクスファイルは、以下のディレクトリ内に保存されます。

outputs/saved_models/[モデルバージョン]/metrics

8.2.2.2. メトリクスファイルの詳細

以下のメトリクスファイルが生成されます。

ファイル名 内容
test_accuracy.json 各エポックにおけるテスト精度。
test_losses.json 各エポックにおけるテスト損失。
training_losses.json 各エポックにおける訓練損失。
validation_losses.json 各エポックにおけるバリデーション損失。

これらのファイルは、モデルの性能評価や学習の進行状況を定量的に分析するための貴重な情報源です。

8.2.2.3. メトリクスファイルの例示

以下は、メトリクスファイルの内容の一部の例です。

  • test_accuracy.json
{
    "epoch_1": 0.92,
    "epoch_2": 0.94,
    "epoch_3": 0.95,
    ...
}
  • test_losses.json
{
    "epoch_1": 0.30,
    "epoch_2": 0.25,
    "epoch_3": 0.20,
    ...
}
  • training_losses.json
{
    "epoch_1": 0.15,
    "epoch_2": 0.10,
    "epoch_3": 0.08,
    ...
}
  • validation_losses.json
{
    "epoch_1": 0.16,
    "epoch_2": 0.09,
    "epoch_3": 0.07,
    ...
}