blob: 967765740aff11b2100bdd85fd65628caac7cf4f [file] [log] [blame] [view]
<!--- Licensed to the Apache Software Foundation (ASF) under one -->
<!--- or more contributor license agreements. See the NOTICE file -->
<!--- distributed with this work for additional information -->
<!--- regarding copyright ownership. The ASF licenses this file -->
<!--- to you under the Apache License, Version 2.0 (the -->
<!--- "License"); you may not use this file except in compliance -->
<!--- with the License. You may obtain a copy of the License at -->
<!--- http://www.apache.org/licenses/LICENSE-2.0 -->
<!--- Unless required by applicable law or agreed to in writing, -->
<!--- software distributed under the License is distributed on an -->
<!--- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -->
<!--- KIND, either express or implied. See the License for the -->
<!--- specific language governing permissions and limitations -->
<!--- under the License. -->
# Model API
The model API provides a simplified way to train neural networks using common best practices.
It's a thin wrapper built on top of the [ndarray](../python/ndarray/ndarray.md) and [symbolic](../python/symbol/symbol.md)
modules that make neural network training easy.
Topics:
* [Train a Model](#train-a-model)
* [Save the Model](#save-the-model)
* [Periodic Checkpoint](#periodic-checkpointing)
* [Initializer API Reference](#initializer-api-reference)
* [Evaluation Metric API Reference](#evaluation-metric-api-reference)
* [Optimizer API Reference](#optimizer-api-reference)
* [Model API Reference](#model-api-reference)
## Train the Model
To train a model, perform two steps: configure the model using the symbol parameter,
then call ```model.Feedforward.create``` to create the model.
The following example creates a two-layer neural network.
```python
# configure a two layer neuralnetwork
data = mx.symbol.Variable('data')
fc1 = mx.symbol.FullyConnected(data, name='fc1', num_hidden=128)
act1 = mx.symbol.Activation(fc1, name='relu1', act_type='relu')
fc2 = mx.symbol.FullyConnected(act1, name='fc2', num_hidden=64)
softmax = mx.symbol.SoftmaxOutput(fc2, name='sm')
# create a model
model = mx.model.FeedForward.create(
softmax,
X=data_set,
num_epoch=num_epoch,
learning_rate=0.01)
```
You can also use the `scikit-learn-style` construct and `fit` function to create a model.
```python
# create a model using sklearn-style two-step way
model = mx.model.FeedForward(
softmax,
num_epoch=num_epoch,
learning_rate=0.01)
model.fit(X=data_set)
```
For more information, see [Model API Reference](#model-api-reference).
## Save the Model
After the job is done, save your work.
To save the model, you can directly pickle it with Python.
We also provide `save` and `load` functions.
```python
# save a model to mymodel-symbol.json and mymodel-0100.params
prefix = 'mymodel'
iteration = 100
model.save(prefix, iteration)
# load model back
model_loaded = mx.model.FeedForward.load(prefix, iteration)
```
The advantage of these two `save` and `load` functions are that they are language agnostic.
You should be able to save and load directly into cloud storage, such as Amazon S3 and HDFS.
## Periodic Checkpointing
We recommend checkpointing your model after each iteration.
To do this, add a checkpoint callback ```do_checkpoint(path)``` to the function.
The training process automatically checkpoints the specified location after
each iteration.
```python
prefix='models/chkpt'
model = mx.model.FeedForward.create(
softmax,
X=data_set,
iter_end_callback=mx.callback.do_checkpoint(prefix),
...)
```
You can load the model checkpoint later using ```Feedforward.load```.
## Use Multiple Devices
Set ```ctx``` to the list of devices that you want to train on.
```python
devices = [mx.gpu(i) for i in range(num_device)]
model = mx.model.FeedForward.create(
softmax,
X=dataset,
ctx=devices,
...)
```
Training occurs in parallel on the GPUs that you specify.
```eval_rst
.. raw:: html
<script type="text/javascript" src='../../../_static/js/auto_module_index.js'></script>
```
## Initializer API Reference
```eval_rst
.. automodule:: mxnet.initializer
:members:
.. raw:: html
<script>auto_index("initializer-api-reference");</script>
```
## Evaluation Metric API Reference
```eval_rst
.. automodule:: mxnet.metric
:members:
.. raw:: html
<script>auto_index("evaluation-metric-api-reference");</script>
```
## Optimizer API Reference
```eval_rst
.. automodule:: mxnet.optimizer
:members:
.. raw:: html
<script>auto_index("optimizer-api-reference");</script>
```
## Model API Reference
```eval_rst
.. automodule:: mxnet.model
:members:
.. raw:: html
<script>auto_index("model-api-reference");</script>
```
## Next Steps
* See [Symbolic API](../python/symbol/symbol.md) for operations on NDArrays that assemble neural networks from layers.
* See [IO Data Loading API](../python/io/io.md) for parsing and loading data.
* See [NDArray API](../python/ndarray/ndarray.md) for vector/matrix/tensor operations.
* See [KVStore API](../python/kvstore/kvstore.md) for multi-GPU and multi-host distributed training.