[JAVA] Verwenden Sie TensorFlow von JRuby

Piyo7 hat vor einigen Tagen TensorFlows Java-API von Scala aufrufen veröffentlicht. Ich habe versucht zu sehen, welche Art von Code es von JRuby sein würde.

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

Wenn Sie es mit ausführen, erhalten Sie mit Sicherheit [4, 10, 18].

Ich war ein wenig süchtig nach dem Import von org.tensorflow

  import 'org.tensorflow.*'

Anstatt zu schreiben, wurde es zu einer Methode, einen Namespace TF und include_package zu definieren.

Vergleich

Eine Bibliothek, die TensorFlow von Ruby aus ausführt, wurde im vergangenen Juni veröffentlicht

somaticio/tensorflow.rb

Scheint ein Klassiker zu sein.

Der Vergleich des an diese Bibliothek angehängten Beispielcodes mit dem obigen Beispiel.rb, example.rb ist erheblich redundanter. ist.

Wenn es sinnvoll ist, diesen Code weiterzuentwickeln, wird lediglich das Modul TF durch einen intelligenteren Wrapper ersetzt.

(1) [Metaprogramming] -Modul TF unter Verwendung von Symbolinformationen auf der Java-Seite (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 Bietet eine abstraktere (Ruby-ähnliche) API.

Es ist möglich, dass.

Keras wird mit Keras 2 in TensorFlow integriert (→ Roadmap für Frühjahr 2017: Keras 2, PR-Freeze, TF-Integration), Java Es scheint, dass die API-Spezifikationen immer noch instabil sind. Leider sind sowohl (1) als auch (2) verfrüht.

Recommended Posts

Verwenden Sie TensorFlow von JRuby
Rufen Sie Java von JRuby aus auf
Verwenden Sie benutzerdefinierte Datenbankfunktionen von JPQL
Rufen Sie die Java-API von TensorFlow von Scala aus auf
Verwenden Sie den PostgreSQL-Datentyp (jsonb) aus Java
[Flattern] Wie verwende ich C / C ++ von Dart?