Announcing DeepLearning.scala 1.0.0

28 March 2017

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 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.

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.

DeepLearning.scala is an open source deep-learning toolkit in Scala created by our colleagues at ThoughtWorks. We're excited about this project because it uses differentiable functional programming to create and compose neural networks; a developer simply writes code in Scala with static typing.