Awesome
<h1 align="center"> <a href="https://gleethos.github.io/neureka/index.html">NEUREKA</a> </h1> <h2 align="center"><b> A lightweight <br> platform independent <br> tensor library for the JVM </b></h2> <p align="center">OpenCL accelerated nd-arrays / tensors for Java, Kotlin, Groovy, Scala, Jython, JRuby...</p> <!--- - Visit [Neurekas homepage](https://gleethos.github.io/neureka/index.html) for more information! - Try out the latest release: [neureka.jar](https://github.com/Gleethos/neureka/raw/master/production/lib/neureka-1.0.0.jar) --> <!--- - [![HitCount](http://hits.dwyl.com/Gleethos/neureka.svg)](http://hits.dwyl.com/Gleethos/neureka) -->Current Build | Code Coverage | Version | Code Quality | Licence | Size |
---|---|---|---|---|---|
:hammer_and_wrench: Features
<table> <tr> </tr> <tr> <td>- tensors & nd-arrays
- convolution
- broadcasting
- dynamic computation graph
- autograd
- flexible indexing and slicing
- seeding
- labeling
- jpg, png, idx support
- highly extensible backend
Take a quick look :eyes:
<table> <tr> <th>Impress me!</th> <th>Show me more</th> <th>Documentation</th> </tr> <tr> <td> </td> <td>- Neureka with Java :coffee:
- Neureka with Groovy :star:
- living<br>documentation
- Javadocs :book:
:robot: Tech
Dynamic Autograd : Recording the Computation-Graph
Neureka trains your neural network using a computation graph recorder.
This is contrary to the approaches found in other frameworks such as TensorFlow, Theano, Caffe, and CNTK which require the definition of a computation graph ahead of time. This means a developer has to build a neural network structure which cannot change during runtime.
Neureka, uses the recorded computation graph in order to apply a technique called reverse-mode auto-differentiation, which allows your network structure to change during runtime arbitrarily with zero lag or overhead.<br> This powerful feature has been inspired by PyTorch:
- Motivation :fire:
Main-Package Overview
Package | Description |
---|---|
neureka | the root package containing the tensor class and the following sub-packages |
neureka.devices | a sub-package which enables cross platform acceleration (OpenCLDevice ) and tensor persistence (FileDevice ) |
neureka.math | a sub-package containing collections of functions and the ability to create custom ones |
neureka.optimization | a sub-package for weight-gradient optimization |
neureka.autograd | the guts of Neurekas autograd system |
neureka.backend | the backend containing both a consistent API and a standard implementation |
Getting started with Apache Maven
<dependency>
<groupId>com.github.gleethos</groupId>
<artifactId>neureka</artifactId>
<version>1.0.0</version>
</dependency>
Getting started with Gradle
Groovy DSL:
implementation 'com.github.gleethos:neureka:1.0.0'
Kotlin DSL:
implementation("com.github.gleethos:neureka:1.0.0")
Getting started with ![](https://jitpack.io/v/Gleethos/neureka.svg)
1. Add the JitPack url in your root build.gradle
at the end of repositories
allprojects {
repositories {
//...
maven { url 'https://jitpack.io' }
}
}
2. Add Neureka as dependency
...either by specifiying the version tag:
dependencies {
implementation 'com.github.Gleethos:neureka:v1.0.0'
}
...or by using a custom commit hash instead:
dependencies {
implementation 'com.github.Gleethos:neureka:8485bca'//Any commit hash...
}
Getting started with Groovy Grape
@GrabResolver(name = 'jitpack.io', root = 'https://jitpack.io')
@Grab('com.github.Gleethos:neureka:v1.0.0')
import neureka.*
:rocket: Building from source
Execute the following:
gradlew build
Tests:
gradlew check
Jar file:
gradlew jar
Min-jar file:
gradlew proguard
:mount_fuji: Dependencies
- JOCL 2.+ - (OpenCL binding)
- SLF4J 1.7.+ - (Logging API allowing for custom backends)
:book: Documentation
:microscope: Tests & Specs :scroll:
- BDD & living documentation with Spock!
- Yes! A browsable test suite. Check it out!!
:seedling: Development
![GitHub commits](https://img.shields.io/github/commits-since/Gleethos/neureka/v0.0.0.svg)
Want to contribute? Don't worry:
There is plenty of developer friendly highly readable living documentation to go through which explains the inner and outer workings of this project very well!
If you want to dive right into it, start off by extending the backend for additional types of operations or data type support.
Any feedback or contribution, even as simple as a typo fix, is always greatly appreciated!
:memo: Todos - ![Issues](https://img.shields.io/github/issues-raw/Gleethos/neureka.svg?maxAge=25000)
- Make a wish! :)
:balance_scale: License
- MIT -> It's Free! ...
<!--- ## CPU Only Test Coverage ## [![Code Coverage](https://img.shields.io/codecov/c/github/gleethos/neureka)](https://codecov.io/github/gleethos/neureka) ## Star History ## [![Star History Chart](https://api.star-history.com/svg?repos=Gleethos/neureka&type=Date)](https://star-history.com/#Gleethos/neureka&Date) -->