alumina 0.3.0

An Experimental Deep Learning Library
Documentation
# Alumina

An experimental deep learning library written in pure rust. Breakage expected on each release in the short term.
See mnist.rs in examples or [Rusty_SR](https://github.com/millardjn/rusty_sr) for usage samples.

## Contributions

Issues are a great place for discussion, problems, requests, and coordinating future work.

Blatantly incorrect documentation contributions are encouraged as a way to guide efforts on docs, just submit a PR and fill a doc comment with anything from your best guess to passive aggressive nursery rhymes.

## Documentation

Patchy until the library settles down, particularly until the graph abstraction is finalised and the switch to ndarray is completed.

## Progress

 - [x] Computation hypergraph
 - [x] Dense Connection and Bias operations
 - [x] Loss functions
   - [x] Mean Squared Error
   - [x] Categorical Cross Entropy
   - [x] SoftMax Cross Entropy
   - [ ] Binary Cross Entropy
 - [x] Activations
   - [x] Tanh
   - [x] Logistic
   - [x] Identity
   - [x] ReLU
   - [x] LeakyReLU
   - [x] ELU
   - [x] SoftMax
   - [x] SRGB Curves
   - [x] BeLU
   - [ ] SoftExp
   - [ ] SoftPlus
 - [x] Spatial operations
   - [x] Shape constraint propagation
   - [x] N-dimensional Convolution
     - [x] Arbitrary padding
     - [ ] Strides
   - [x] N-dimensional AvgPooling
   - [x] N-dimensional spaxel shuffling for "Sub-pixel Convolution"
   - [ ] N-dimensional Linear-Interpolation (backprop not finished)
   - [x] Global Pooling
   - [x] Broadcasting
 - [x] Data Loading
   - [x] Mnist
   - [ ] Cifar
   - [x] Image Folders
   - [x] Imagenet (ILSVRC)
 - [x] SGD
 - [ ] RMSProp
 - [ ] ADAM
 - [x] CAIN
   - [x] Adaptive BatchSize
   - [x] Adaptive Learning Rate
   - [ ] Adaptive Momentum
 - [x] Basic numerical tests
 - [ ] Limit Optimiser evaluation batch size to stay within memory limits
 - [ ] Selectively disable calculation of forward values, node derivatives and parameter derivatives
 - [ ] Builder patterns for operation contruction
 - [ ] Split Graph struct into mutable GraphBuilder and immutable Sub-Graphs
   - [ ] Replace 'accidentally quadratic' graph algorithms
   - [ ] Replace up-front allocation with Sub-Graph optimised allocation/deallocation patterns based on liveness analysis of nodes
 - [ ] Overhaul data ingestion, particularly buffering input processing/reads.
 - [ ] Move to bluss' ndarray where possible (long overdue)
 - [ ] Improve naming inter/intra-library consistancy
 - [ ] Complete Documentation
 - [ ] Reduce ability to express illegal states in API
 - [ ] Move from panics to error-chain
 - [ ] Guard unsafe code rigourously
 - [ ] Comprehensive tests
 - [ ] Arrayfire as an option for sgemm on APUs

### Distant

 - [ ] RNNs
 - [ ] Efficient probablistic structures (e.g. generative RNNs)
 - [ ] Graph optimisation passes and inplace operations
 - [ ] Support for both dynamic and static graphs


## License

MIT