A map of current machine learning frameworks
Marie-Hélène Burle
October 3, 2023
Disclaimers
Keeping up with the ever evolving field of machine learning is daunting. This webinar aims to bring a little help in this navigation and maybe inspire you to explore new tools. It is however flawed in several ways:
it is not exhaustive and focuses on the most used frameworks accessible through 3 popular languages,
a lot of the content could be accused of being biased and subjective,
it will be outdated quickly.
Ultimately, the best frameworks are the ones that work best for you and your needs. The only piece of advice I would give is to always use open source tools.
Python
Python
Julia
Julia
R
R
Languages
Languages
Languages--Python
Languages--Julia
Languages--R
Most popular frameworks
cluster_dl
Deep learning
cluster_ml
Traditional machine learning
scikit-learn
scikit-learn
Python
Python
scikit-learn--Python
Julia
Julia
scikit-learn--Julia
R
R
scikit-learn--R
Several Julia ML packages
Several Julia ML packages
Several Julia ML packages--Julia
Many R ML packages
Many R ML packages
Many R ML packages--R
Torch
Torch
TensorFlow
TensorFlow
JAX
JAX
Keras
Keras
Several Julia DL packages
Several Julia DL packages
Several R DL packages
Several R DL packages
Python--Torch
Python--TensorFlow
Python--JAX
Python--Keras
Julia--Torch
Julia--TensorFlow
Julia--Keras
Julia--Several Julia DL packages
R--Torch
R--TensorFlow
R--Keras
R--Several R DL packages
scikit-learn is a toolbox of ML algorithms
TensorFlow was a leading DL framework for years, but is now fading
PyTorch slowly took over TensorFlow, but is now starting to face competition
Most popular frameworks
cluster_ml
Traditional machine learning
cluster_dl
Deep learning
scikit-learn
scikit-learn
Python
Python
scikit-learn--Python
Julia
Julia
scikit-learn--Julia
R
R
scikit-learn--R
Several Julia ML packages
Several Julia ML packages
Several Julia ML packages--Julia
Many R ML packages
Many R ML packages
Many R ML packages--R
Torch
Torch
TensorFlow
TensorFlow
JAX
JAX
Keras
Keras
Several Julia DL packages
Several Julia DL packages
Several R DL packages
Several R DL packages
Python--Torch
Python--TensorFlow
Python--JAX
Python--Keras
Julia--Torch
Julia--TensorFlow
Julia--Keras
Julia--Several Julia DL packages
R--Torch
R--TensorFlow
R--Keras
R--Several R DL packages
JAX is its own domain specific language (DSL) of restrictive NumPy-like “pure” functions with automatic differentiation (AD) and accelerated linear algebra (XLA)—a domain-specific compiler
keras is a high-level API for DL
Most popular frameworks
cluster_ml
Traditional machine learning
cluster_dl
Deep learning
scikit-learn
scikit-learn
Python
Python
scikit-learn--Python
Julia
Julia
scikit-learn--Julia
R
R
scikit-learn--R
Several Julia ML packages
Several Julia ML packages
Several Julia ML packages--Julia
Many R ML packages
Many R ML packages
Many R ML packages--R
Torch
Torch
TensorFlow
TensorFlow
JAX
JAX
Keras
Keras
Several Julia DL packages
Several Julia DL packages
Several R DL packages
Several R DL packages
Python--Torch
Python--TensorFlow
Python--JAX
Python--Keras
Julia--Torch
Julia--TensorFlow
Julia--Keras
Julia--Several Julia DL packages
R--Torch
R--TensorFlow
R--Keras
R--Several R DL packages
A fast evolving field: - MXNET was just retired a few days ago
- caffe2 is now part of PyTorch
- JAX is looking like a replacement for TensorFlow
- keras has been the high-level frontend for a shifting list of backends (currently TensorFlow , PyTorch , JAX )
Python
cluster_ml
Traditional machine learning
cluster_dl
Deep learning
scikit-learn
scikit-learn
Python
Python
scikit-learn--Python
Julia
Julia
scikit-learn--Julia
R
R
scikit-learn--R
Several Julia ML packages
Several Julia ML packages
Several Julia ML packages--Julia
Many R ML packages
Many R ML packages
Many R ML packages--R
Torch
Torch
TensorFlow
TensorFlow
JAX
JAX
Keras
Keras
Several Julia DL packages
Several Julia DL packages
Several R DL packages
Several R DL packages
Python--Torch
Python--TensorFlow
Python--JAX
Python--Keras
Julia--Torch
Julia--TensorFlow
Julia--Keras
Julia--Several Julia DL packages
R--Torch
R--TensorFlow
R--Keras
R--Several R DL packages
Several popular packages written for Python, but not in Python (too slow)
→ written in Fortran, C, C++, or DSL
Julia
cluster_ml
Traditional machine learning
cluster_dl
Deep learning
scikit-learn
scikit-learn
Python
Python
scikit-learn--Python
Julia
Julia
scikit-learn--Julia
R
R
scikit-learn--R
Several Julia ML packages
Several Julia ML packages
Several Julia ML packages--Julia
Many R ML packages
Many R ML packages
Many R ML packages--R
Torch
Torch
TensorFlow
TensorFlow
JAX
JAX
Keras
Keras
Several Julia DL packages
Several Julia DL packages
Several R DL packages
Several R DL packages
Python--Torch
Python--TensorFlow
Python--JAX
Python--Keras
Julia--Torch
Julia--TensorFlow
Julia--Keras
Julia--Several Julia DL packages
R--Torch
R--TensorFlow
R--Keras
R--Several R DL packages
Classic Python packages available in Julia thanks to wrappers
In addition many packages written in Julia (as the language is fast enough)
Julia
cluster_ml
Traditional machine learning
cluster_dl
Deep learning
scikit-learn
scikit-learn
Python
Python
scikit-learn--Python
Julia
Julia
scikit-learn--Julia
R
R
scikit-learn--R
Several Julia ML packages
Several Julia ML packages
Several Julia ML packages--Julia
Many R ML packages
Many R ML packages
Many R ML packages--R
Torch
Torch
TensorFlow
TensorFlow
JAX
JAX
Keras
Keras
Several Julia DL packages
Several Julia DL packages
Several R DL packages
Several R DL packages
Python--Torch
Python--TensorFlow
Python--JAX
Python--Keras
Julia--Torch
Julia--TensorFlow
Julia--Keras
Julia--Several Julia DL packages
R--Torch
R--TensorFlow
R--Keras
R--Several R DL packages
Let’s have a look at the Julia specific packages.
A rich ecocystem of packages
cluster_ml
Traditional machine learning
cluster_dl
Deep learning
AugmentedGaussianProcesses
AugmentedGaussianProcesses
EvoTrees
EvoTrees
MachineLearning
MachineLearning
TSML
TSML
DecisionTree
DecisionTree
MLJ
MLJ
ZigZagBoomerang
ZigZagBoomerang
LightGBM
LightGBM
Turing
Turing
BayesianOptimization
BayesianOptimization
GLMNet
GLMNet
LIBSVM
LIBSVM
MLBase
MLBase
Julia
Julia
MLBase--Julia
MLKernels
MLKernels
Clustering
Clustering
ForneyLab
ForneyLab
Flux
Flux
Lux
Lux
Knet
Knet
Merlin
Merlin
MLJFlux
MLJFlux
FluxTraining
FluxTraining
GraphNeuralNetworks
GraphNeuralNetworks
Julia--MLJFlux
Not counting utility packages...
cluster_ml
Traditional machine learning
cluster_dl
Deep learning
cluster_utilities
Utilities:
AugmentedGaussianProcesses
AugmentedGaussianProcesses
EvoTrees
EvoTrees
MachineLearning
MachineLearning
TSML
TSML
DecisionTree
DecisionTree
MLJ
MLJ
ZigZagBoomerang
ZigZagBoomerang
LightGBM
LightGBM
Turing
Turing
BayesianOptimization
BayesianOptimization
GLMNet
GLMNet
LIBSVM
LIBSVM
MLBase
MLBase
Julia
Julia
MLBase--Julia
MLKernels
MLKernels
Clustering
Clustering
ForneyLab
ForneyLab
Flux
Flux
Lux
Lux
Knet
Knet
Merlin
Merlin
MLJFlux
MLJFlux
FluxTraining
FluxTraining
GraphNeuralNetworks
GraphNeuralNetworks
Metalhead
Metalhead
DataLoaders
DataLoaders
MLUtils
MLUtils
MLDataUtils
MLDataUtils
MLDatasets
MLDatasets
TensorBoardLogger
TensorBoardLogger
ObjectDetector
ObjectDetector
Julia--MLJFlux
And many AD implementations!
cluster_ml
Traditional machine learning
cluster_dl
Deep learning
cluster_utilities
Utilities:
cluster_autodiff
Autodiff:
AugmentedGaussianProcesses
AugmentedGaussianProcesses
EvoTrees
EvoTrees
MachineLearning
MachineLearning
TSML
TSML
DecisionTree
DecisionTree
MLJ
MLJ
ZigZagBoomerang
ZigZagBoomerang
LightGBM
LightGBM
Turing
Turing
BayesianOptimization
BayesianOptimization
GLMNet
GLMNet
LIBSVM
LIBSVM
MLBase
MLBase
Julia
Julia
MLBase--Julia
MLKernels
MLKernels
Clustering
Clustering
ForneyLab
ForneyLab
Flux
Flux
Lux
Lux
Knet
Knet
Merlin
Merlin
MLJFlux
MLJFlux
FluxTraining
FluxTraining
GraphNeuralNetworks
GraphNeuralNetworks
Metalhead
Metalhead
DataLoaders
DataLoaders
MLUtils
MLUtils
MLDataUtils
MLDataUtils
MLDatasets
MLDatasets
TensorBoardLogger
TensorBoardLogger
ObjectDetector
ObjectDetector
StochasticAD
StochasticAD
ForwardDiff
ForwardDiff
ReverseDiff
ReverseDiff
Zygote
Zygote
Enzyme
Enzyme
ChainRules
ChainRules
TaylorDiff
TaylorDiff
Julia--MLJFlux
Notable options
cluster_ml
Traditional machine learning
cluster_dl
Deep learning
cluster_utilities
Utilities:
cluster_autodiff
Autodiff:
AugmentedGaussianProcesses
AugmentedGaussianProcesses
EvoTrees
EvoTrees
MachineLearning
MachineLearning
TSML
TSML
DecisionTree
DecisionTree
MLJ
MLJ
ZigZagBoomerang
ZigZagBoomerang
LightGBM
LightGBM
Turing
Turing
BayesianOptimization
BayesianOptimization
GLMNet
GLMNet
LIBSVM
LIBSVM
MLBase
MLBase
Julia
Julia
MLBase--Julia
MLKernels
MLKernels
Clustering
Clustering
ForneyLab
ForneyLab
Flux
Flux
Lux
Lux
Knet
Knet
Merlin
Merlin
MLJFlux
MLJFlux
FluxTraining
FluxTraining
GraphNeuralNetworks
GraphNeuralNetworks
Metalhead
Metalhead
DataLoaders
DataLoaders
MLUtils
MLUtils
MLDataUtils
MLDataUtils
MLDatasets
MLDatasets
TensorBoardLogger
TensorBoardLogger
ObjectDetector
ObjectDetector
StochasticAD
StochasticAD
ForwardDiff
ForwardDiff
ReverseDiff
ReverseDiff
Zygote
Zygote
Enzyme
Enzyme
ChainRules
ChainRules
TaylorDiff
TaylorDiff
Julia--MLJFlux
Machine learning:
MLJ is a ML toolbox with Julia functions and wrappers to scikit-learn models
Notable options
cluster_dl
Deep learning
cluster_utilities
Utilities:
cluster_autodiff
Autodiff:
cluster_ml
Traditional machine learning
AugmentedGaussianProcesses
AugmentedGaussianProcesses
EvoTrees
EvoTrees
MachineLearning
MachineLearning
TSML
TSML
DecisionTree
DecisionTree
MLJ
MLJ
ZigZagBoomerang
ZigZagBoomerang
LightGBM
LightGBM
Turing
Turing
BayesianOptimization
BayesianOptimization
GLMNet
GLMNet
LIBSVM
LIBSVM
MLBase
MLBase
Julia
Julia
MLBase--Julia
MLKernels
MLKernels
Clustering
Clustering
ForneyLab
ForneyLab
Flux
Flux
Lux
Lux
Knet
Knet
Merlin
Merlin
MLJFlux
MLJFlux
FluxTraining
FluxTraining
GraphNeuralNetworks
GraphNeuralNetworks
Metalhead
Metalhead
DataLoaders
DataLoaders
MLUtils
MLUtils
MLDataUtils
MLDataUtils
MLDatasets
MLDatasets
TensorBoardLogger
TensorBoardLogger
ObjectDetector
ObjectDetector
StochasticAD
StochasticAD
ForwardDiff
ForwardDiff
ReverseDiff
ReverseDiff
Zygote
Zygote
Enzyme
Enzyme
ChainRules
ChainRules
TaylorDiff
TaylorDiff
Julia--MLJFlux
Neural networks:
Flux is a DL framework similar to PyTorch in pure Julia
Lux is a rewrite of Flux keeping the trainable and non-trainable parameters decoupled
Notable options
cluster_ml
Traditional machine learning
cluster_dl
Deep learning
cluster_utilities
Utilities:
cluster_autodiff
Autodiff:
AugmentedGaussianProcesses
AugmentedGaussianProcesses
EvoTrees
EvoTrees
MachineLearning
MachineLearning
TSML
TSML
DecisionTree
DecisionTree
MLJ
MLJ
ZigZagBoomerang
ZigZagBoomerang
LightGBM
LightGBM
Turing
Turing
BayesianOptimization
BayesianOptimization
GLMNet
GLMNet
LIBSVM
LIBSVM
MLBase
MLBase
Julia
Julia
MLBase--Julia
MLKernels
MLKernels
Clustering
Clustering
ForneyLab
ForneyLab
Flux
Flux
Lux
Lux
Knet
Knet
Merlin
Merlin
MLJFlux
MLJFlux
FluxTraining
FluxTraining
GraphNeuralNetworks
GraphNeuralNetworks
Metalhead
Metalhead
DataLoaders
DataLoaders
MLUtils
MLUtils
MLDataUtils
MLDataUtils
MLDatasets
MLDatasets
TensorBoardLogger
TensorBoardLogger
ObjectDetector
ObjectDetector
StochasticAD
StochasticAD
ForwardDiff
ForwardDiff
ReverseDiff
ReverseDiff
Zygote
Zygote
Enzyme
Enzyme
ChainRules
ChainRules
TaylorDiff
TaylorDiff
Julia--MLJFlux
Autodiff:
Zygote is the AD engine for Flux
Enzyme is a novel, more powerful AD tool for languages using the LLVM compiler. Now being incorporated in Lux
R
cluster_dl
Deep learning
cluster_ml
Traditional machine learning
scikit-learn
scikit-learn
Python
Python
scikit-learn--Python
Julia
Julia
scikit-learn--Julia
R
R
scikit-learn--R
Several Julia ML packages
Several Julia ML packages
Several Julia ML packages--Julia
Many R ML packages
Many R ML packages
Many R ML packages--R
Torch
Torch
TensorFlow
TensorFlow
JAX
JAX
Keras
Keras
Several Julia DL packages
Several Julia DL packages
Several R DL packages
Several R DL packages
Python--Torch
Python--TensorFlow
Python--JAX
Python--Keras
Julia--Torch
Julia--TensorFlow
Julia--Keras
Julia--Several Julia DL packages
R--Torch
R--TensorFlow
R--Keras
R--Several R DL packages
Classic Python packages available in R thanks to wrappers
In addition many packages written for R, but not in R (too slow)
→ written in Fortran, C, or C++
R
cluster_ml
Traditional machine learning
cluster_dl
Deep learning
scikit-learn
scikit-learn
Python
Python
scikit-learn--Python
Julia
Julia
scikit-learn--Julia
R
R
scikit-learn--R
Several Julia ML packages
Several Julia ML packages
Several Julia ML packages--Julia
Many R ML packages
Many R ML packages
Many R ML packages--R
Torch
Torch
TensorFlow
TensorFlow
JAX
JAX
Keras
Keras
Several Julia DL packages
Several Julia DL packages
Several R DL packages
Several R DL packages
Python--Torch
Python--TensorFlow
Python--JAX
Python--Keras
Julia--Torch
Julia--TensorFlow
Julia--Keras
Julia--Several Julia DL packages
R--Torch
R--TensorFlow
R--Keras
R--Several R DL packages
Let’s have a look at the R specific packages.
cluster_ml
Traditional machine learning
cluster_dl
Deep learning
e1071
e1071
ipred
ipred
kernlab
kernlab
rpart
rpart
party
party
caret
caret
gmodels
gmodels
randomForest
randomForest
ranger
ranger
gbm
gbm
xgboost
xgboost
C50
C50
cluster
cluster
R
R
cluster--R
class
class
mclust
mclust
naivebayes
naivebayes
glmnet
glmnet
RSNNS
RSNNS
h2o
h2o
darch
darch
deepr
deepr
RCNN4R
RCNN4R
rcppDL
rcppDL
rnn
rnn
neuralnet
neuralnet
deepnet
deepnet
R--RCNN4R
A very large field, particularly when it comes to statistical machine learning
Quite a lot of DL packages, despite R’s slow speed
The Machine Learning CRAN Task View is a good reference for many packages
Languages summary
1
- Huge userbase
- Mature frameworks
- Smooth APIs
- Easy to scale
2
Needs other
languages
for speed
3
- All in Julia
- Tools at the
edge of research
- Great for developpers
4
- Small userbase
- Not the smoothest
for end users
5
- Countless packages
- Very user-friendly
- Well documented
6
- Needs C for
speed
- Slow
- Too slow for DL
- Hard to scale
Strengths
Strengths
Weaknesses
Weaknesses
Python
Python
Julia
Julia
R
R
Languages summary
1
Good
2
Good
3
Good
4
Good
5
Good
6
Very limited
Machine learning
Machine learning
Deep learning
Deep learning
Python
Python
Julia
Julia
R
R
Frameworks picks
Machine learning
1
scikit-learn
or MLJ
2
Julia or R
stats packages
3
Toolboxes of
classic algorithms
1->3
4
Advanced and
specialized techniques
Which ones to use
depends on specific problems
2->4
Frameworks picks
Deep learning
1
PyTorch
2
JAX
4
Optional Keras
at high-level
Optional JIT
1->4
3
Lux with Enzyme
2->4
5
Sophisticated AD
Optional packages
for ease of use
(e.g. Equinox)
Domain-specific language
2->5
6
Explicit parameters
High performance AD
JIT (Julia)
3->6
Frameworks picks
Deep learning
1
PyTorch
2
JAX
4
Optional Keras
at high-level
Optional JIT
1->4
3
Lux with Enzyme
2->4
5
Sophisticated AD
Optional packages
for ease of use
(e.g. Equinox, Flax)
2->5
6
Explicit parameters
High performance AD
JIT (Julia)
3->6
7
Easy
All in Python
Unified framework
4->7
8
Fastest options at the moment
Many optional moving parts
Requires learning a DSL (JAX)
or Julia (Lux)
5->8
6->8
Automatic differentiation (AD)
1
Static graph
and XLA
2
Dynamic tape-based
1->2
a
TensorFlow
3
Dynamic tape-based
and JIT
2->3
b
PyTorch
4
Eager graph
and XLA
3->4
c
PyTorch
5
Non-standard interpretation
and XLA
4->5
d
TensorFlow2
6
Works at lower level
5->6
e
JAX
7
Works on LLVM itself
6->7
f
Zygote
g
Enzyme
A
Inconvenient
B
Hard to optimize
C
Not currently developped
D
Dynamism doesn't
play well with XLA
E
Only sublanguage
F
Harder implementation
G
Very hard to implement