{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Training modules overview"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"hide_input": true
},
"outputs": [],
"source": [
"from fastai.basic_train import *\n",
"from fastai.gen_doc.nbdoc import *\n",
"from fastai import *\n",
"from fastai.vision import *\n",
"from fastai.callbacks import *"
]
},
{
"cell_type": "markdown",
"metadata": {
"hide_input": false
},
"source": [
"The fastai library is structured training around a [`Learner`](/basic_train.html#Learner) object that binds together a pytorch model, some data with an optimizer and a loss function, which then will allow us to launch training.\n",
"\n",
"[`basic_train`](/basic_train.html#basic_train) contains the definition of this [`Learner`](/basic_train.html#Learner) class along with the wrapper around pytorch optimizer that the library uses. It defines the basic training loop that is used each time you call the [`fit`](/basic_train.html#fit) function in fastai (or one of its variants). This training loop is kept to the minimum number of instructions, and most of its customization happens in [`Callback`](/callback.html#Callback) objects.\n",
"\n",
"[`callback`](/callback.html#callback) contains the definition of those, as well as the [`CallbackHandler`](/callback.html#CallbackHandler) that is responsible for the communication between the training loop and the [`Callback`](/callback.html#Callback) functions. It maintains a state dictionary to be able to provide to each [`Callback`](/callback.html#Callback) all the informations of the training loop, easily allowing any tweaks you could think of.\n",
"\n",
"In [`callbacks`](/callbacks.html#callbacks), each [`Callback`](/callback.html#Callback) is then implemented in separate modules. Some deal with scheduling the hyperparameters, like [`callbacks.one_cycle`](/callbacks.one_cycle.html#callbacks.one_cycle), [`callbacks.lr_finder`](/callbacks.lr_finder.html#callbacks.lr_finder) or [`callback.general_sched`](/callbacks.general_sched.html#callbacks.general_sched). Others allow special kind of trainings like [`callbacks.fp16`](/callbacks.fp16.html#callbacks.fp16) (mixed precision) or [`callbacks.rnn`](/callbacks.rnn.html#callbacks.rnn). The [`Recorder`](/basic_train.html#Recorder) or [`callbacks.hooks`](/callbacks.hooks.html#callbacks.hooks) are useful to save some internal data.\n",
"\n",
"[`train`](/train.html#train) then implements those callbacks with useful helper functions. Lastly [`metrics`](/metrics.html#metrics) contains all the functions you might want to call to evaluate your results."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Walk-through of key functionality"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We'll do a quick overview of the key pieces of fastai's training modules. See the separate module docs for details on each. We'll use the classic MNIST dataset for the training documentation, cut down to just 3's and 7's. To minimize the boilerplate in our docs we've defined a funcion to grab the data from URLs.MNIST_SAMPLE which will automatically download and unzip if not already done function, then we put it in an [`ImageDataBunch`](/vision.data.html#ImageDataBunch)."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"hide_input": false
},
"outputs": [],
"source": [
"path = untar_data(URLs.MNIST_SAMPLE)\n",
"data = ImageDataBunch.from_folder(path)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Basic training with [`Learner`](/basic_train.html#Learner)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can create minimal simple CNNs using [`simple_cnn`](/layers.html#simple_cnn) (see [`models`](/vision.models.html#vision.models) for details on creating models):"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"model = simple_cnn((3,16,16,2))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The most important object for training models is [`Learner`](/basic_train.html#Learner), which needs to know, at minimum, what data to train with and what model to train."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"learn = Learner(data, model)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"That's enough to train a model, which is done using [`fit`](/basic_train.html#fit). If you have a CUDA-capable GPU it will be used automatically. You have to say how many epochs to train for."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Total time: 00:02\n",
"epoch train_loss valid_loss\n",
"1 0.141339 0.121598 (00:02)\n",
"\n"
]
}
],
"source": [
"learn.fit(1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Viewing metrics"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To see how our training is going, we can request that it reports various [`metrics`](/metrics.html#metrics) after each epoch. You can pass it to the constructor, or set it later. Note that metrics are always calculated on the validation set."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Total time: 00:02\n",
"epoch train_loss valid_loss accuracy\n",
"1 0.109016 0.091778 0.969578 (00:02)\n",
"\n"
]
}
],
"source": [
"learn.metrics=[accuracy]\n",
"learn.fit(1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Extending training with callbacks"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You can use [`callback`](/callback.html#callback)s to modify training in almost any way you can imagine. For instance, we've provided a callback to implement Leslie Smith's 1cycle training method."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Total time: 00:02\n",
"epoch train_loss valid_loss accuracy\n",
"1 0.091946 0.068201 0.974975 (00:02)\n",
"\n"
]
}
],
"source": [
"cb = OneCycleScheduler(learn, lr_max=0.01)\n",
"learn.fit(1, callbacks=cb)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The [`Recorder`](/basic_train.html#Recorder) callback is automatically added for you, and you can use it to see what happened in your training, e.g.:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"