Python以外でもできる。言語別ディープラーニング用フレームワークまとめ

機械学習、ディープラーニングを行おうとするとPython一択というイメージがあります。たしかにフレームワークが豊富で、情報も数多いので一番手軽な選択肢に思えます。

しかし、ほかのプログラミング言語でもディープラーニング用のフレームワークが増えてきています。今回はそれらを言語別にまとめて紹介します。

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

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

deeplearning4j/deeplearning4j: Deeplearning4j, ND4J, DataVec and more – deep learning & linear algebra for Java/Scala with GPUs + Spark

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で構築するのはナンセンスです。適したプログラミング言語、フレームワークの選定に役立てて下さい。

]]>

上部へスクロール