[JAVA] Utilisez TensorFlow de JRuby

Piyo7 a publié Appeler l'API Java de TensorFlow depuis Scala il y a quelques jours. J'ai essayé de voir quel genre de code il proviendrait de JRuby.

code

example.rb


require 'pp'
require 'java'
require './libtensorflow-1.0.0-PREVIEW1.jar'

module TF
  include_package 'org.tensorflow'
end

graph = TF::Graph.new

a = graph.opBuilder("Const", "a").
  setAttr("dtype", TF::DataType::INT32).
  setAttr("value", TF::Tensor.create([1, 2, 3].to_java(:int))).
  build().
  output(0)

b = graph.opBuilder("Const", "b").
  setAttr("dtype", TF::DataType::INT32).
  setAttr("value", TF::Tensor.create([4, 5, 6].to_java(:int))).
  build().
  output(0)

c = graph.opBuilder("Mul", "c").
  addInput(a).
  addInput(b).
  build().
  output(0)

session = TF::Session.new(graph)
out = Array.new(3).to_java(:int)
session.runner().fetch("c").run().get(0).copyTo(out)

pp out #=> int[4, 10, 18]@71623278

$ ruby -J-Djava.library.path=./jni example.rb

Si vous l'exécutez avec, vous obtiendrez certainement [4, 10, 18].

J'étais un peu accro au processus d'importation de org.tensorflow

  import 'org.tensorflow.*'

Au lieu d'écrire, c'est devenu une méthode pour définir un espace de noms TF et include_package.

Comparaison

Une bibliothèque qui exécute TensorFlow de Ruby a été publiée en juin dernier

somaticio/tensorflow.rb

Semble être un classique.

En comparant le Sample Code attaché à cette bibliothèque avec l'exemple ci-dessus, example.rb est considérablement plus redondant. est.

S'il est logique de faire évoluer ce code, cela remplacerait simplement le module TF par un wrapper plus intelligent.

(1) Module [Metaprogramming] TF utilisant les informations de symbole côté Java (http://qiita.com/tags/%E3%83%A1%E3%82%BF%E3%83%97%E3% 83% AD% E3% 82% B0% E3% 83% A9% E3% 83% 9F% E3% 83% B3% E3% 82% B0).

(2) Keras Fournit une API plus abstraite (semblable à Ruby).

Il est possible que.

Keras sera intégré à TensorFlow avec Keras 2 (→ feuille de route printemps 2017: Keras 2, PR freeze, intégration TF), Java Il semble que les spécifications de l'API soient encore instables. Malheureusement, les deux (1) et (2) sont prématurés.

Recommended Posts

Utilisez TensorFlow de JRuby
Appeler Java depuis JRuby
Utiliser les fonctions définies par l'utilisateur de la base de données de JPQL
Appelez l'API Java de TensorFlow depuis Scala
Utiliser le type de données PostgreSQL (jsonb) à partir de Java
[Flutter] Comment utiliser C / C ++ depuis Dart?