このページでは、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 lossval_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 | 区切り文字(デフォルトは ',') |
append | Trueで既存ファイルに追記、Falseで上書き |
decimal | 小数点の文字(デフォルトは '.') |
例:ヘッダーを残して追記したい場合
csv_logger = CSVLogger('training_log.csv', append=True)
ただし、追記時にヘッダー重複が起きないよう注意してください(通常はCSVLoggerが既存ファイルをチェックしてヘッダーを重ねない実装になっていますが、手動で編集している場合は要確認)。
まとめ
CSVLogger を使えば、学習過程のメトリクスを簡単にCSV形式で保存でき、あとからグラフ化したり、異なる条件の実験結果を比較したりする際に役立ちます。 Colab での保存場所、append オプションの使い方などを理解しておくことで、機械学習の実験管理がよりスムーズになります。
特に、複数のハイパーパラメータを検証する場合や、学習の挙動を後から分析したい場合は必須の機能です。ぜひあなたのプロジェクトでも活用してみてください。

0 件のコメント:
コメントを投稿