to let this method run every k steps or every k epochs.
to let this method run every k steps (potentially more frequently) or every k epochs.
### What you can do in the callback
### What you can do in the callback
* Access tensors / ops in either training / inference mode (need to create them in `_setup_graph`).
* Access tensors / ops (details mentioned above):
* For existing tensors/ops created in the tower, access them through [self.trainer.towers](../../modules/train.html#tensorpack.train.TowerTrainer.towers).
* Extra tensors/ops have to be created in `_setup_graph` callback method.
* Write stuff to the monitor backend, by `self.trainer.monitors.put_xxx`.
* Write stuff to the monitor backend, by `self.trainer.monitors.put_xxx`.
The monitors might direct your events to TensorFlow events file, JSON file, stdout, etc.
The monitors might direct your events to TensorFlow events file, JSON file, stdout, etc.
You can get history monitor data as well. See the docs for [Monitors](../../modules/callbacks.html#tensorpack.callbacks.Monitors)
You can access history monitor data as well. See the docs for [Monitors](../../modules/callbacks.html#tensorpack.callbacks.Monitors)
* Access the current status of training, such as `epoch_num`, `global_step`. See [here](../../modules/callbacks.html#tensorpack.callbacks.Callback)
* Access the current status of training, such as `self.epoch_num`, `self.global_step`. See [here](../../modules/callbacks.html#tensorpack.callbacks.Callback)
* Stop training by `raise StopTraining()` (with `from tensorpack.train import StopTraining`).
* Stop training by `raise StopTraining()` (with `from tensorpack.train import StopTraining`).
* Anything else that can be done with plain python.
* Anything else that can be done with plain python.
...
@@ -114,6 +117,6 @@ You can overwrite any of the following methods to define a new callback:
...
@@ -114,6 +117,6 @@ You can overwrite any of the following methods to define a new callback:
* You can choose to only implement "what to do", and leave "when to do" to
* You can choose to only implement "what to do", and leave "when to do" to