Rufen Sie die Java-API von TensorFlow von Scala aus auf

Googles stolze Bibliothek für maschinelles Lernen, TensorFlow 1.0, wurde veröffentlicht. Werfen Sie einen Blick auf das, was aktualisiert wurde ... Java API!?

Experimental APIs for Java and Go

Announcing TensorFlow 1.0

Die Tatsache, dass die Java-API verwendet werden kann, sollte in der JVM-Sprache Scala aufgerufen werden können, daher habe ich es sofort versucht: raise_hands:

Vorbereitung

tensorflow/tensorflow/java/README.md Laden Sie einfach die JAR- und native Bibliotheken herunter, entpacken Sie sie und stellen Sie sie entsprechend bereit. Unter Mac OS X sieht es so aus.

$ tree
.
├── build.sbt
├── jni
│   └── libtensorflow_jni.dylib
├── lib
│   └── libtensorflow-1.0.0-PREVIEW1.jar
└── src
    └── main
        └── scala
            └── Main.scala

Code

Dies ist ein Testcode, der nur das Elementprodukt von Vektor A (1, 2, 3) und Vektor B (4, 5, 6) berechnet.

src/main/scala/Main.scala


import org.tensorflow._

object Main extends App {
  val graph = new Graph()
  val a = graph.opBuilder("Const", "a").
    setAttr("dtype", DataType.INT32).
    setAttr("value", Tensor.create(Array(1, 2, 3))).
    build().
    output(0)

  val b = graph.opBuilder("Const", "b").
    setAttr("dtype", DataType.INT32).
    setAttr("value", Tensor.create(Array(4, 5, 6))).
    build().
    output(0)

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

  val session = new Session(graph)
  val out = new Array[Int](3)
  session.runner().fetch("c").run().get(0).copyTo(out)

  println(out.mkString(", "))
}

Grafik, Sitzung / tensorflow / Session), Tensor scheint keine Ressourcen freizugeben, es sei denn, Sie rufen ausdrücklich "close ()" auf. Seien Sie vorsichtig, wenn Sie anständigen Code schreiben.

Lauf

$ sbt run -Djava.library.path=./jni
...
4, 10, 18

Ja, wir haben den Vektor C (4, 10, 18) berechnet.

Impressionen

Apropos maschinelles Lernen, insbesondere Deep Learning, die Kultur von Python ist stark, und als Person, die statisch typisierte Sprachen mag, war ich etwas nervös, aber die Verwendung einer Sprache, die ich auf diese Weise kenne, erhöht meine Spannung: Herz Augen: Natürlich gibt es gute Java-Bibliotheken wie Deeplearning4j, aber die neuesten Lernmodelle werden häufig in TensorFlow implementiert ...

Erstens hängt die Schwierigkeit des maschinellen Lernens weitgehend von der Datenverarbeitung vor der Verarbeitung ab, und ich bin der Meinung, dass der Schwellenwert gesenkt wird, wenn Sie ihn mit einem Code schreiben können. Es scheint, dass nur die minimale Java-API vorbereitet ist, aber ich hoffe, dass sie in Zukunft immer reicher wird: joy :: joy :: joy:

Umgebung

build.sbt


name := "tensorflow-scala"
scalaVersion := "2.12.1"

Recommended Posts

Rufen Sie die Java-API von TensorFlow von Scala aus auf
Rufen Sie die GitHub-API über Javas Socket-API Teil2 auf
Rufen Sie Java von JRuby aus auf
Rufen Sie Kotlins versiegelte Klasse von Java aus an
Aufruf API [Aufruf]
Datenverarbeitung mit der Stream-API von Java 8
Rufen Sie die Rest-API von GitHub über die Socket-API von Java auf
Rufen Sie die Java-Bibliothek von C mit JNI auf
API-Integration von Java mit Jersey Client
Rufen Sie Java-Methoden aus JavaScript auf, das in Java ausgeführt wird
Rufen Sie die Windows-Benachrichtigungs-API in Java auf
Rufen Sie die Salesforce REST-API von Java aus auf
API aufrufen [Vorbereitung]
API aufrufen [Handling]
Java Stream API
Rufen Sie die Microsoft Emotion API auf, indem Sie Bilddaten direkt von Java senden.
Verwenden Sie native Bibliotheken von Scala über Java CPP + Java
Holen Sie sich Unixtime (Sekunden) von ZonedDateTime in Scala / Java
Verwenden Sie Matplotlib aus Java oder Scala mit Matplotlib4j
API aufrufen [Core Edition]
Änderungen von Java 8 zu Java 11
Summe von Java_1 bis 100
Packen Sie die API-Antwort (Java)
Wie schreibe ich Scala aus der Perspektive von Java
Rufen Sie die Amazon Product Advertising API 5.0 (PA-API v5) in Java auf
Verhalten beim Aufrufen von Java-Argumentmethoden mit variabler Länge aus Scala / Kotlin / Java
[Java] Stream API / Map
Eval Java-Quelle von Java
Rufen Sie eine Methode mit Kotlins Rückrufblock von Java aus auf
Fehlerbehebung bei der Docker-Client Java API
6 Funktionen, die ich nach meiner Rückkehr von Scala nach Java verpasst habe
Greifen Sie über Java auf API.AI zu
Zabbix API in Java
Verwenden Sie TensorFlow von JRuby
JAVA-Konstruktoraufrufverarbeitung
Rufen Sie ein in Swift geschriebenes Programm von Processing (Java) auf.
Diese Katze von Metadata Co., Ltd. Ruft die Katzen-API in Java auf.
Implementieren Sie die Java-Schnittstelle in der JRuby-Klasse und rufen Sie sie von Java aus auf
Aufrufen und Verwenden der API in Java (Spring Boot)
[Kotlin] Holen Sie sich Java Constructor / Method von KFunction und rufen Sie es auf
Migration von Cobol nach JAVA
Java ab Anfänger überschreiben
Elastic Search Indexerstellung aus Java
Java Stream API Spickzettel
Neue Funktionen von Java7 bis Java8
Java Stream API in 5 Minuten
Stellen Sie eine Verbindung von Java zu PostgreSQL her
Mehrstufige Auswahl (Java / Groovy / Scala)
Java, Instanz für Anfänger
[Java] Stream API - Stream-Beendigungsverarbeitung
[Java] Stream API - Stream Zwischenverarbeitung
Java ab Anfänger, Vererbung
Java-Leben von vorne anfangen
[Java] Einführung in die Stream-API
Von ineffektivem Java zu effektivem Java
JavaScript von Java aus gesehen
Java Basic Learning Content 8 (Java-API)