Bright Wire is an extensible machine learning library for .NET with GPU support (via CUDA).
Bright Wire runs "out of the box" for CPU based computation on .net 4.6 and above and .net standard 2. For GPU based computation, you will need to install NVIDIA CUDA Toolkit 10 (and have a Kepler or better NVIDIA GPU).
To enable higher performance CPU based computation, Bright Wire also supports the Intel Math Kernel Library (MKL) via the Numerics.Net Wrapper.
- Getting Started
- Classification Overview
- Building a Language Model
- Recognising Handwritten Digits (MNIST)
- Sentiment Analysis
- Text Clustering
- Simple Recurrent Neural Networks
- GRU Recurrent Neural Networks
- Sequence to Sequence Neural Networks with LSTM
- Convolutional Neural Networks
- Deep Feed Forward Neural Networks with Batch Normalization and SELU
To install the .net4 version (no CUDA support, any CPU) use:
To add CUDA support (.net4, x64 only) use:
Note: When using the CUDA version, make sure that the
/cuda/brightwire.ptx file is copied to the output directory (Properties/Copy To Output Directory).
To install the .net standard version for use with Xamarin or UWP use:
Recompiling the PTX
It's highly likely that your GPU supports different CUDA capabilities than the precompiled
brightwire.ptx in this repository. You can find what is your capability level here. It's a number, ex. 3.0, 3.5, that you use for specifying
If you get an
ErrorNoBinaryForGPU exception, that means you have to recompile. The instructions are here.
Example command for NVIDIA GeForce GTX770M (CUDA 3.0)
nvcc kernel.cu -use_fast_math -ptx -m 64 -arch compute_30 -code sm_30 -o kernel.ptx
You can use Bright Wire on Mono (tested with 4.6.2/Fedora 25) out of the box, no additional setting up is needed.
Bright Wire can also work with CUDA on Mono. When you build your solution, you will need to extract
ConfigForLinux.zip archive from here to your output path.
That way, CUDA won't look for
nvcuda on Linux, but for libcuda shared object. You can even run on your Optimus enabled laptop (tested with GTX770M with Bumblebee) with
optirun mono [binary_name].
Another issue you may have is that
protobuf library complains that it is already referencing
NETStandard library. NuGet version is a bit older on Mono, so please try with the latest NuGet binary from their website. That way, all the libraries get pulled correctly.
Connectionist aka "Deep Learning"
- Feed Forward, Convolutional and Bidirectional network architectures
- LSTM, GRU, Simple, Elman and Jordan recurrent neural networks
- L2, Dropout and DropConnect regularisation
- Relu, LeakyRelu, Sigmoid, Tanh and SoftMax activation functions
- Gaussian, Xavier and Identity weight initialisation
- Cross Entropy, Quadratic and Binary cost functions
- Momentum, NesterovMomentum, Adagrad, RMSprop and Adam gradient descent optimisations
- Naive Bayes
- Multinomial Bayes
- Multivariate Bernoulli
- Markov Models
- K Means clustering
- Hierachical clustering
- Non Negative Matrix Factorisation
- Random Projection
- Logistic Regression
- Multinomial Logistic Regression
- Decision Trees
- Random Forest
- K Nearest Neighbour classification
- In-memory and file based data processing