This package contains implementations of several common neural network structures, using Theano for optimization.
Install the latest published code using pip:
pip install theanets
Or download the current source and run it from there:
git clone http://github.com/lmjohns3/theano-nets
cd theano-nets
python setup.py develop
There are a few examples in the examples/
directory. Run an example with the --help
flag to get a list of all the command-line arguments; there are many of them, but some of the notable ones are:
-n or --layers N1 N2 N3 N4
Build a network with N1
inputs, two hidden layers with N2
and N3
units, and N4
outputs. (Note that this argument is held constant in the example code, since it needs to correspond to the shape of the data being processed.)
- ::
-g or --hidden-activation logisticlinear|...
Use the given activation function for hidden layer units. (Output layer units have a linear activation function by default, but an alternative can be given using the --output-activation
flag.) Several activation functions can be pipelined together using whitespace or the plus symbol.
- ::
-O or --optimize sgdsgd hf...
Use the given optimization method(s) to train network parameters. Several training methods can be used in sequence by separating their names with spaces on the command line.
Probably the easiest way to start with the library is to copy one of the examples and modify it to perform your tasks. The usual workflow involves instantiating theanets.Experiment
with a subclass of theanets.Network
, adding some data by calling add_dataset(...)
, and finally calling train()
to learn a good set of parameters for your data:
exp = theanets.Experiment(theanets.Classifier)
exp.add_dataset('train', my_dataset[:1000])
exp.add_dataset('valid', my_dataset[1000:])
exp.train()
You can save()
the trained model to a pickle, or use the trained network
directly to predict()
the outputs on a new dataset:
print(exp.network.predict(new_dataset))
exp.save('network-pickle.pkl.gz')
The documentation is relatively sparse, so please file bugs if you find that there's a particularly hard-to-understand area in the code.