しかし、ほかのプログラミング言語でもディープラーニング用のフレームワークが増えてきています。今回はそれらを言語別にまとめて紹介します。
JavaScript
TensorFlow.js
TensorFlow.js | JavaScript デベロッパー向けの機械学習
PythonのTensorFlowをJavaScriptにポーティングしたフレームワークになります。Pythonで作成したモデルを変換して利用できます。
Keras-js
keras-team/keras: Deep Learning for humans
KerasはTheano、TensorFlowが扱えるディープラーニング用ライブラリで、Keras-jsはそのモデルが扱えるライブラリになります。サンプルコードは次のようになります。
const model = new KerasJS.Model({ filepaths: { model: 'url/path/to/model.json', weights: 'url/path/to/model_weights.buf', metadata: 'url/path/to/model_metadata.json' } gpu: true }) model.ready().then(() => { model.predict(inputData).then(outputData => { // アウトプットを利用する }) })
Swift
Core ML
Core ML – 日本語ドキュメント – Apple Developer
Appleが開発しているCore MLを使えば、iOSやmacOSアプリでディープラーニングが利用できます。モデルの作成、トレーニングも可能です。
Swift-AI
Swift-AI/Swift-AI: The Swift machine learning library.
Swift-AIはオープンソース、すべてSwiftで書かれたディープラーニングフレームワークになります。
Swift for TensorFlow
TensorflowをSwiftで使うためのライブラリです。モデルの作成やトレーニングも可能です。
Ruby
ruby-dnn
unagiootoro/ruby-dnn: ruby-dnn is a ruby deep learning library.
活性化関数も数多く実装されており、実用的なフレームワークになっています。開発も継続して行われています。
ONNX Runtime
ankane/onnxruntime: Run ONNX models in Ruby
ONNXモデルをRubyで実行するためのライブラリです。モデルは別に作成しておき、それをRubyでも利用する場合を想定しているようです。
model = OnnxRuntime::Model.new("model.onnx") model.predict({x: [1, 2, 3]})
Torch.rb
ankane/torch.rb: Deep learning for Ruby, powered by LibTorch
PyTorchのAPIと互換性があります(メソッド名はRuby流に変更されています)。PyTorchをすでに使ったことがある人にとっては使いやすそうです。
TensorFlow for Ruby
ankane/tensorflow: Deep learning for Ruby
RubyからTensorFlowを使うためのライブラリです。別途TensorFlowが必要です。モデルはONNXのものを使っています。
Red Chainer for Ruby
red-data-tools/red-chainer: A flexible framework for neural network for Ruby
ChainerをRubyにポーティングしたライブラリになります。GPUもサポートしています。
Menoh Ruby Extension
pfnet-research/menoh-ruby: Ruby binding for Menoh DNN inference library
MenohのAPIをサポートしたRubyライブラリです。元々Menohには多くのラッパーがあり、menoh-rubyはその1つです。
PyCall
mrkn/pycall.rb: Calling Python functions from the Ruby language
ディープラーニング用ではありませんが、RubyからPythonを呼び出せるライブラリです。pycallを経由することで、Pythonライブラリをそのまま利用できます。
Perl
AI::MXNet
AI::MXNet – Perl interface to MXNet machine learning library – metacpan.org
MXNetはApacheが開発しているディープラーニングのフレームワークです。そのMXNetをPerlから操作するAPIライブラリがAI::MXNetになります。
Java
Deeplearning4j, ND4J, DataVec and more
Java用のディープラーニング用フレームワークであり、Androidでも利用できます。
Dart
Machine learning algorithms for Dart developers
gyrdym/ml_algo: Machine learning algorithms in Dart programming language
Dartで開発されているので、Flutterを使ってiOS/Android両方で動作する機械学習フレームワークとして使える可能性がありそうです。
Deep learning library for Dart
deeplearning4d/deeplearning4d: Deep learning library for Dart
こちらもDart用ですが、m_algoに比べると機能が少ないようです。
PHP
PHP-ML
PHP-ML – PHPのための機械学習ライブラリ 日本語訳
機械学習を行うためのアルゴリズム、クロス検証、事前処理、特徴抽出などが一つのパッケージになっています。サンプルのコードは次のようになっています。
require_once __DIR__ . '/vendor/autoload.php'; use Phpml\Classification\KNearestNeighbors; $samples = [[1, 3], [1, 4], [2, 4], [3, 1], [4, 1], [4, 2]]; $labels = ['a', 'a', 'a', 'b', 'b', 'b']; $classifier = new KNearestNeighbors(); $classifier->train($samples, $labels); $classifier->predict([3, 2]); // -> return 'b'
C++
sony/nnabla: Neural Network Libraries
C++/C/Pythonに対応したフレームワークです。組み込み系での利用を想定して開発されています。
Go
patrikeh/go-deep: Artificial Neural Network
Goでディープラーニングを行うためのライブラリです。GPUはサポートされていないので、まだ実験的な立ち位置のようです。
n := deep.NewNeural(&deep.Config{ /* Input dimensionality */ Inputs: 2, /* Two hidden layers consisting of two neurons each, and a single output */ Layout: []int{2, 2, 1}, /* Activation functions: Sigmoid, Tanh, ReLU, Linear */ Activation: deep.ActivationSigmoid, /* Determines output layer activation & loss function: ModeRegression: linear outputs with MSE loss ModeMultiClass: softmax output with Cross Entropy loss ModeMultiLabel: sigmoid output with Cross Entropy loss ModeBinary: sigmoid output with binary CE loss */ Mode: deep.ModeBinary, /* Weight initializers: {deep.NewNormal(μ, σ), deep.NewUniform(μ, σ)} */ Weight: deep.NewNormal(1.0, 0.0), /* Apply bias */ Bias: true, })
まとめ
Pythonだけでなく、数多くのプログラミング言語でディープラーニングを実行できるのが分かったでしょうか。もちろん得手不得手であったり、機能差はあるかも知れません。しかし機械学習のためだけにシステム全体をPythonで構築するのはナンセンスです。適したプログラミング言語、フレームワークの選定に役立てて下さい。
]]>