{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## CSV Logger"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"hide_input": true
},
"outputs": [],
"source": [
"from fastai.vision import *\n",
"from fastai.gen_doc.nbdoc import *\n",
"from fastai.callbacks import *"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"hide_input": true
},
"outputs": [
{
"data": {
"text/markdown": [
"
\n",
"\n",
"> CSVLogger(**`learn`**:[`Learner`](/basic_train.html#Learner), **`filename`**:`str`=***`'history'`***) :: [`LearnerCallback`](/basic_train.html#LearnerCallback)\n",
"\n",
"A [`LearnerCallback`](/basic_train.html#LearnerCallback) that saves history of metrics while training `learn` into CSV `filename`. "
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"show_doc(CSVLogger)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First let's show an example of use, with a training on the usual MNIST dataset."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"path = untar_data(URLs.MNIST_TINY)\n",
"data = ImageDataBunch.from_folder(path)\n",
"learn = Learner(data, simple_cnn((3, 16, 16, 2)), metrics=[accuracy, error_rate], callback_fns=[CSVLogger])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"Total time: 00:01 \n",
" \n",
" | epoch | \n",
" train_loss | \n",
" valid_loss | \n",
" accuracy | \n",
" error_rate | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.586522 | \n",
" 0.433411 | \n",
" 0.935622 | \n",
" 0.064378 | \n",
"
\n",
" \n",
" | 2 | \n",
" 0.448884 | \n",
" 0.187622 | \n",
" 0.949928 | \n",
" 0.050072 | \n",
"
\n",
" \n",
" | 3 | \n",
" 0.345840 | \n",
" 0.130823 | \n",
" 0.957082 | \n",
" 0.042918 | \n",
"
\n",
"
\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"learn.fit(3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Training details have been saved in 'history.csv'."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[PosixPath('/home/ubuntu/.fastai/data/mnist_tiny/labels.csv'),\n",
" PosixPath('/home/ubuntu/.fastai/data/mnist_tiny/export.pkl'),\n",
" PosixPath('/home/ubuntu/.fastai/data/mnist_tiny/test'),\n",
" PosixPath('/home/ubuntu/.fastai/data/mnist_tiny/train'),\n",
" PosixPath('/home/ubuntu/.fastai/data/mnist_tiny/history.csv'),\n",
" PosixPath('/home/ubuntu/.fastai/data/mnist_tiny/models'),\n",
" PosixPath('/home/ubuntu/.fastai/data/mnist_tiny/cleaned.csv'),\n",
" PosixPath('/home/ubuntu/.fastai/data/mnist_tiny/valid')]"
]
},
"execution_count": null,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"learn.path.ls()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that, as with all [`LearnerCallback`](/basic_train.html#LearnerCallback), you can access the object as an attribute of `learn` after it has been created. Here it's `learn.csv_logger`."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"hide_input": true
},
"outputs": [
{
"data": {
"text/markdown": [
"\n",
"\n",
"> read_logged_file()\n",
"\n",
"Read the content of saved file "
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"show_doc(CSVLogger.read_logged_file)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" epoch | \n",
" train_loss | \n",
" valid_loss | \n",
" accuracy | \n",
" error_rate | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 1 | \n",
" 0.586522 | \n",
" 0.433411 | \n",
" 0.935622 | \n",
" 0.064378 | \n",
"
\n",
" \n",
" | 1 | \n",
" 2 | \n",
" 0.448884 | \n",
" 0.187622 | \n",
" 0.949928 | \n",
" 0.050072 | \n",
"
\n",
" \n",
" | 2 | \n",
" 3 | \n",
" 0.345840 | \n",
" 0.130823 | \n",
" 0.957082 | \n",
" 0.042918 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" epoch train_loss valid_loss accuracy error_rate\n",
"0 1 0.586522 0.433411 0.935622 0.064378\n",
"1 2 0.448884 0.187622 0.949928 0.050072\n",
"2 3 0.345840 0.130823 0.957082 0.042918"
]
},
"execution_count": null,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"learn.csv_logger.read_logged_file()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Calback methods"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You don't call these yourself - they're called by fastai's [`Callback`](/callback.html#Callback) system automatically to enable the class's functionality."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"hide_input": true
},
"outputs": [
{
"data": {
"text/markdown": [
"\n",
"\n",
"> on_train_begin(**\\*\\*`kwargs`**:`Any`)\n",
"\n",
"Prepare file with metric names. "
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"show_doc(CSVLogger.on_train_begin)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"hide_input": true
},
"outputs": [
{
"data": {
"text/markdown": [
"\n",
"\n",
"> on_epoch_end(**`epoch`**:`int`, **`smooth_loss`**:`Tensor`, **`last_metrics`**:`MetricsList`, **\\*\\*`kwargs`**:`Any`) → `bool`\n",
"\n",
"Add a line with `epoch` number, `smooth_loss` and `last_metrics`. "
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"show_doc(CSVLogger.on_epoch_end)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"hide_input": true
},
"outputs": [
{
"data": {
"text/markdown": [
"\n",
"\n",
"> on_train_end(**\\*\\*`kwargs`**:`Any`)\n",
"\n",
"Close the file. "
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"show_doc(CSVLogger.on_train_end)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Undocumented Methods - Methods moved below this line will intentionally be hidden"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## New Methods - Please document or move to the undocumented section"
]
}
],
"metadata": {
"jekyll": {
"keywords": "fastai",
"summary": "Callbacks that saves the tracked metrics during training",
"title": "callbacks.csv_logger"
},
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}