Skip to content

toddsundsted/mxnet.cr

main
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
src
 
 
 
 
 
 
 
 

Deep Learning for Crystal

GitHub Release Build Status Documentation

MXNet.cr provides MXNet bindings for the Crystal programming language. MXNet is a framework for machine learning and deep learning written in C++, supporting distributed training across multiple machines and multiple GPUs (if available).

MXNet.cr follows the design of the Python bindings, albeit with Crystal syntax. The following code:

require "mxnet"
a = MXNet::NDArray.array([[1, 2], [3, 4]])
b = MXNet::NDArray.array([1, 0])
puts a * b

outputs:

[[1, 0], [3, 0]]
<NDArray 2x2 int32 cpu(0)>

Examples

If you want to see what MXNet.cr can do, check out toddsundsted/deep-learning. It is a collection of problems and solutions from Deep Learning - The Straight Dope, a set of notebooks teaching deep learning using MXNet.

Installation

MXNet.cr requires MXNet.

Build MXNet from source (including Python language bindings) or install the library from prebuilt packages using the Python package manager pip, per the MXNet installation instructions:

https://mxnet.incubator.apache.org/install/index.html

And add the following to your application's shard.yml:

dependencies:
  mxnet:
    github: toddsundsted/mxnet.cr

Troubleshooting

MXNet.cr relies on the Python library to find the installed MXNet shared library ("libmxnet.so"). You can verify MXNet is installed with the following Python code:

import mxnet as mx
a = mx.ndarray.array([[1, 2], [3, 4]])
b = mx.ndarray.array([1, 0])
print(a * b)

which outputs:

[[1. 0.]
 [3. 0.]]
<NDArray 2x2 @cpu(0)>

OSX

On OSX, you may need to give your program a hint about the location of the MXNet shared library (libmxnet.so). If you build and run your program and see an error message like the following:

dyld: Library not loaded: lib/libmxnet.so
  Referenced from: /Users/homedirectory/.cache/crystal/crystal-run-eval.tmp
  Reason: image not found

you need to either: 1) explicitly set the DYLD_FALLBACK_LIBRARY_PATH environment variable to point to the directory containing libmxnet.so, or 2) move or copy libmxnet.so into a well-known location (such as the project's own lib directory).

Alternatively, and more permanently, you can modify the libmxnet.so shared library so that it knows where it's located at runtime (you will modify the library's LC_ID_DYLIB information):

LIBMXNET=/Users/homedirectory/mxnet-1.5.1/lib/python3.6/site-packages/mxnet/libmxnet.so # the full path
install_name_tool -id $LIBMXNET $LIBMXNET

Status

MXNet.cr currently implements a subset of Gluon, and supports a rich set of operations on arrays and symbols (arithmetic, trigonometric, hyperbolic, exponents and logarithms, powers, comparison, logical, rounding, sorting, searching, reduction and indexing) with automatic differentiation built in.

Implemented classes:

  • MXNet
    • Autograd
    • Context
    • Executor
    • Optimizer
    • NDArray
    • Symbol
    • Gluon
      • Block
      • HybridBlock
      • Sequential
      • HybridSequential
      • SymbolBlock
      • Dense
      • Pooling
      • Conv1D
      • Conv2D
      • Conv3D
      • MaxPool1D
      • MaxPool2D
      • MaxPool3D
      • Flatten
      • L1Loss
      • L2Loss
      • SoftmaxCrossEntropyLoss
      • Activation
      • Trainer
      • Parameter
      • Constant