Version 1.0.0 is the first stable release of DeepLearning.scala, a simple language for creating complex neural networks.

Along with the library, we created a series of tutorials for Scala developers who want to learn deep learning algorithms.

## Features in 1.0.0

### Differentiable basic types

Like Theano and other deep learning toolkits, DeepLearning.scala allows you to build neural networks from mathematical formulas. It supports floats, doubles, GPU-accelerated N-dimensional arrays, and calculates derivatives of the weights in the formulas.

### Differentiable ADTs

Neural networks created by DeepLearning.scala support ADT data structures (e.g. HList and Coproduct), and calculate derivatives through these data structures.

### Differentiable control flow

Neural networks created by DeepLearning.scala may contains control flows like `if`

/`else`

/`match`

/`case`

in a regular language. Combined with ADT data structures, you can implement arbitary algorithms inside neural networks, and still keep some of the variables used in the algorithms differentiable and trainable.

### Composability

Neural networks created by DeepLearning.scala are composable. You can create large networks by combining smaller networks. If two larger networks share some sub-networks, the weights in shared sub-networks trained with one network affect the other network.

### Static type system

All of the above features are statically type checked.

## Links

## Acknowledges

DeepLearning.scala is heavily inspired by @MarisaKirisame. Originally, we worked together for a prototype of deep learning framework, then we split our work aprt to this project and DeepDarkFantasy.

@milessabin’s shapeless provides a solid foundation for type-level programming as used in DeepLearning.scala.