【Keras】CSVLoggerの使い方|学習ログを簡単に保存する方法

投稿日:2025年11月19日水曜日 最終更新日:

CSVLogger Google Colab Keras

X f B! P L
アイキャッチ画像 【Keras】CSVLoggerの使い方|学習ログを簡単に保存する方法

このページでは、Keras(tf.keras)で学習時のログをCSVに保存する CSVLogger の基本的な使い方を、初心者向けにわかりやすく解説します。サンプルコード、Colabでの保存場所、よくある注意点まで網羅しています。

また、本記事は 【Keras入門】model.fit()とは?GradientTapeとの違い・使い分け・精度の違いを解説 を踏まえた内容になっています。
必要に応じて、あわせてご参照ください。

CSVLoggerとは

CSVLogger は Keras のコールバックの一つで、学習中に各エポックごとのメトリクス(loss、accuracy、val_loss、val_accuracy など)を CSV ファイルとして保存します。学習履歴の可視化やログ管理を行いたい場合に便利な仕組みです。

導入とインポート

TensorFlow(tf.keras)には標準で含まれており、追加インストールなしで使えます。

from tensorflow.keras.callbacks import CSVLogger

基本サンプル(model.fitで使う)

以下は最小限の利用例です。エポックごとに training_log.csv が作成・更新されます。

from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.callbacks import CSVLogger

# ====== データ読み込み ======
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

# ====== モデル定義 ======
model = keras.Sequential([
            layers.Input(shape=(28, 28)),
            layers.Flatten(),
            layers.Dense(128, activation='relu'),
            layers.Dropout(0.2),
            layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# CSVLogger の準備
csv_logger = CSVLogger('training_log.csv', append=False, separator=',')

# 学習
model.fit(x_train, y_train,
          validation_data=(x_test, y_test),
          epochs=10,
          callbacks=[csv_logger])
ポイント:
  • append=False はファイルを上書きします。ログを追記したい場合は append=True
  • separator=',' はCSVの区切り文字。Excelに合わせたい場合は ';' に変更することもあります。

実行結果

Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11490434/11490434 ━━━━━━━━━━━━━━━━━━━━ 0s 0us/step
Epoch 1/10
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 20s 7ms/step - accuracy: 0.8566 - loss: 0.4816 - val_accuracy: 0.9581 - val_loss: 0.1423
Epoch 2/10
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 13s 7ms/step - accuracy: 0.9539 - loss: 0.1543 - val_accuracy: 0.9674 - val_loss: 0.1015
Epoch 3/10
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 11s 6ms/step - accuracy: 0.9673 - loss: 0.1110 - val_accuracy: 0.9742 - val_loss: 0.0858
Epoch 4/10
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9722 - loss: 0.0886 - val_accuracy: 0.9749 - val_loss: 0.0819
Epoch 5/10
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9771 - loss: 0.0738 - val_accuracy: 0.9761 - val_loss: 0.0772
Epoch 6/10
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9799 - loss: 0.0624 - val_accuracy: 0.9766 - val_loss: 0.0747
Epoch 7/10
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9815 - loss: 0.0579 - val_accuracy: 0.9793 - val_loss: 0.0716
Epoch 8/10
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9826 - loss: 0.0516 - val_accuracy: 0.9769 - val_loss: 0.0737
Epoch 9/10
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9851 - loss: 0.0442 - val_accuracy: 0.9780 - val_loss: 0.0714
Epoch 10/10
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9870 - loss: 0.0415 - val_accuracy: 0.9795 - val_loss: 0.0664
<keras.src.callbacks.history.History at 0x785231a68a70>

状態確認

コマンドを実行して、出力されたファイルの確認を行います。

!ls
sample_data  training_log.csv

training_log.csvの内容を確認します。学習ログが出力されていることがわかります。

!cat training_log.csv
epoch,accuracy,loss,val_accuracy,val_loss
0,0.9128166437149048,0.29786261916160583,0.9581000208854675,0.14233389496803284
1,0.9567166566848755,0.14329451322555542,0.9674000144004822,0.10151886194944382
2,0.9678500294685364,0.10676223784685135,0.9742000102996826,0.08578455448150635
3,0.9733833074569702,0.08720016479492188,0.9749000072479248,0.08190099149942398
4,0.9763833284378052,0.07613826543092728,0.9761000275611877,0.07723293453454971
5,0.9790499806404114,0.06415101140737534,0.9765999913215637,0.07469827681779861
6,0.98089998960495,0.05926285311579704,0.9793000221252441,0.07162029296159744
7,0.9827499985694885,0.05237191170454025,0.9768999814987183,0.07367243617773056
8,0.9839500188827515,0.04778575897216797,0.9779999852180481,0.07142657786607742
9,0.9860333204269409,0.04310100898146629,0.9794999957084656,0.0663931593298912

CSVに保存されるカラムの意味

デフォルトでは、保存されるカラムはコールバックで記録されているメトリクス名です。一般的な列は次のようになります:

  • epoch:エポック番号(0始まり)
  • accuracy:training accuracy(設定している場合)
  • loss:training loss
  • val_accuracy:validation accuracy(設定している場合)
  • val_loss:validation loss(validation_data を与えた場合)

使っているメトリクスやカスタムメトリクスによって列は増減します。

Colabでの注意点(保存先・ダウンロード方法)

Google Colab で実行する場合、ファイルはランタイム(仮想環境)上に作成されます。セッションが切れると消えるので、作成後にGoogle Driveへ移すか、ダウンロードするのがおすすめです。

例:ColabでDriveに保存する

from google.colab import drive
drive.mount('/content/drive')

csv_logger = CSVLogger('/content/drive/MyDrive/keras_logs/training_log.csv', append=False)

ローカルへダウンロードする

from google.colab import files
files.download('training_log.csv')

補足:Driveに保存するとログが永続化されますが、複数ファイルを作る場合はフォルダ管理(例:プロジェクト名でフォルダを作る)をすると整理しやすいです。

よく使うオプション

引数説明
filename出力先ファイル名(パスを含む)
separator区切り文字(デフォルトは ',')
appendTrueで既存ファイルに追記、Falseで上書き
decimal小数点の文字(デフォルトは '.')

例:ヘッダーを残して追記したい場合

csv_logger = CSVLogger('training_log.csv', append=True)

ただし、追記時にヘッダー重複が起きないよう注意してください(通常はCSVLoggerが既存ファイルをチェックしてヘッダーを重ねない実装になっていますが、手動で編集している場合は要確認)。

まとめ

CSVLogger を使えば、学習過程のメトリクスを簡単にCSV形式で保存でき、あとからグラフ化したり、異なる条件の実験結果を比較したりする際に役立ちます。 Colab での保存場所、append オプションの使い方などを理解しておくことで、機械学習の実験管理がよりスムーズになります。

特に、複数のハイパーパラメータを検証する場合や、学習の挙動を後から分析したい場合は必須の機能です。ぜひあなたのプロジェクトでも活用してみてください。

関連記事