Arraymancer was born in-between linalg and neo and is targeted at machine 
learning, with a focus on deep learning and computer-vision (and later speech 
and language hopefully).

I started Arraymancer because you need 4-dimensional tensors for deep learning 
on images (Number of images, RGB colors, height, width) and 5d for videos or 3D 
images.

It takes a Numpy/Julia/Matlab like multidimensional array approach meaning 
operations like reshaping, concatenating arrays over an arbitrary dimensions, 
permuting dimensions, working with stacked 2d matrices in a 3d tensors is 
possible and efficient.

* * *

There are a few twists:

  * Like Andrea, I like linear algebra operations like `+` and `*` to mean math 
(linear algebra) things, so broadcasting and element-wise matrix product is not 
implicit like in Numpy but opt-in: you must use custom operators `.+` and `.*`. 
The benefit is that if you have strange results you can grep those.
  * Like Nim, I choose to have value semantics for my tensors, meaning it's 
copy on assignation. You can opt-in to use "unsafe" operations like 
"unsafeReshape" or "unsafeTranspose" that will provide a view over the same 
data.

It avoids a lot of beginners gotchas and like broadcasting makes it easy to 
grep for potential issues.

Note: For CudaTensors I currently can't due to `=` overloading issues.




* * *

**My short-term plans (consolidating the base):**

  * Convolutional neural networks are just around the corner
  * Improve CudaTensors support
  * Doing demos
  * Cover common deep-learning use cases outside of Recurrent Neural Networks.



**Mid-term plans (focus on data):**

  * CSV loading and/or conversion from a Nim dataframe package like NimData
  * Basic image manipulation (rotating, flipping, blurring ...), in an extra 
package like Arraymancer-vision.
  * Saving and loading models from disk.
  * Provide popular datasets (IRIS, MNIST ...)
  * Recurrent neural networks.



**Long-term plans (hardware and format):**

  * More hardware support (AMD GPUs at least)
  * Provide utilities for general machine learning (and not only deep learning):
    
    * Sparse tensors but like Andrea said, apart on Cuda there is no standard :/
    * PCA and SVD matrices decomposition
    * Clustering tools like KMeans, DBScans



**Very long-term plans (wishlist):**

  * Bindings to gradient boosted trees libraries 
([XGboost](https://github.com/dmlc/xgboost) / 
[LightGBM](https://github.com/Microsoft/LightGBM))
  * Videos loading and analysis
  * New backends: OpenCL, Javascript, Apple Metal



**Very (very !) long-term plans (wishlist reloaded):**

  * More natural language utilities or bindings like 
[spaCy](https://github.com/explosion/spaCy)
  * REST API for example, send Arraymancer an image and it returns what was 
detected in it.
  * [Bayesian Neural 
Networks](https://alpha-i.co/blog/MNIST-for-ML-beginners-The-Bayesian-Way.html) 
which works with uncertainty built-in



**What is not a focus:**

  * Linear algebra/LAPACK not used in Machine Learning (like solving equations)
  * 2D/3D geometry and quaternions 
([nim-glm](https://github.com/stavenko/nim-glm) is probably more suited than 
either neo or Arraymancer)


Reply via email to