Appelez l'API Java de TensorFlow depuis Scala

La fière bibliothèque d'apprentissage automatique de Google, TensorFlow 1.0, a été publiée. Jetez un œil à ce qui a été mis à jour ... API Java !?

Experimental APIs for Java and Go

Announcing TensorFlow 1.0

Le fait que l'API Java puisse être utilisée devrait pouvoir être appelée à partir du langage JVM Scala, je l'ai donc essayé immédiatement: elevé_hands:

Préparation

tensorflow/tensorflow/java/README.md Téléchargez, décompressez et déployez simplement le JAR et les bibliothèques natives selon. Cela ressemble à ceci sur Mac OS X.

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

code

Il s'agit d'un code de test qui ne calcule que le produit élémentaire du vecteur A (1, 2, 3) et du vecteur B (4, 5, 6).

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(", "))
}

Graphique, Session / tensorflow / Session), Tensor semble ne pas libérer de ressources à moins que vous n'appeliez explicitement close (). , Soyez prudent lorsque vous écrivez un code décent.

Courir

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

Oui, nous avons calculé le vecteur C (4, 10, 18).

Impressions

En parlant d'apprentissage automatique, en particulier d'apprentissage en profondeur, la culture de Python est forte, et en tant que personne qui aime les langues à typage statique, j'étais un peu nerveuse, mais utiliser un langage que je connais de cette manière augmente ma tension: heart_eyes: Bien sûr, il existe de bonnes bibliothèques Java telles que Deeplearning4j, mais les derniers modèles d'apprentissage sont souvent implémentés dans TensorFlow ...

Tout d'abord, la difficulté de l'apprentissage automatique dépend en grande partie de la mise en forme des données de prétraitement, et je pense que le seuil sera abaissé si vous pouvez l'écrire avec un code. Il semble que seule l'API Java minimale soit encore préparée, mais j'espère qu'elle deviendra de plus en plus riche à l'avenir: joy :: joy :: joy:

environnement

build.sbt


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

Recommended Posts

Appelez l'API Java de TensorFlow depuis Scala
Appeler l'API GitHub à partir de l'API Socket de Java, partie 2
Appeler Java depuis JRuby
Appeler la classe scellée de Kotlin depuis Java
Appeler l'API [Appel]
Traitement des données à l'aide de l'API de flux de Java 8
Appelez l'API Rest de GitHub à partir de l'API Socket de Java
Appeler la bibliothèque Java à partir de C avec JNI
Intégration API de Java avec Jersey Client
Appel de méthodes Java à partir de JavaScript exécutées en Java
Appelez l'API de notification Windows en Java
Accédez à l'API REST Salesforce depuis Java
Appeler l'API [Préparation]
Appeler l'API [Handling]
API Java Stream
Appelez l'API Microsoft Emotion en envoyant des données d'image directement depuis Java.
Utiliser les bibliothèques natives de Scala via Java CPP + Java
Obtenez unixtime (secondes) de ZonedDateTime dans Scala / Java
Utilisez Matplotlib depuis Java ou Scala avec Matplotlib4j
Appeler l'API [Core Edition]
Changements de Java 8 à Java 11
Somme de Java_1 à 100
Emballez la réponse de l'API (java)
Comment écrire Scala du point de vue de Java
Appelez l'API Amazon Product Advertising 5.0 (PA-API v5) en Java
Comportement lors de l'appel des méthodes d'argument de longueur variable Java à partir de Scala / Kotlin / Java
[Java] API / carte de flux
Évaluer la source Java à partir de Java
Appeler une méthode avec le bloc de rappel de Kotlin depuis Java
Dépannage de l'API Java Docker-Client
6 fonctionnalités que j'ai manquées après mon retour de Scala à Java
Accédez à API.AI depuis Java
Pratique de l'API Java8 Stream
API Zabbix en Java
Utilisez TensorFlow de JRuby
Traitement des appels du constructeur JAVA
Appeler un programme écrit en Swift depuis Processing (Java)
Ce chat de Metadata Co., Ltd. Appelle l'API cat en Java.
Implémentez l'interface Java dans la classe JRuby et appelez-la depuis Java
Comment appeler et utiliser l'API en Java (Spring Boot)
[Kotlin] Obtenez le constructeur / la méthode Java de KFunction et appelez-le
Migration de Cobol vers JAVA
Java à partir du débutant, remplacer
Création d'index Elastic Search à partir de Java
Aide-mémoire de l'API Java Stream
Nouvelles fonctionnalités de Java7 à Java8
API Java Stream en 5 minutes
Connectez-vous de Java à PostgreSQL
Sélection en plusieurs étapes (Java / Groovy / Scala)
Java, instance à partir du débutant
[Java] Stream API - Traitement de l'arrêt du flux
[Java] Stream API - Traitement intermédiaire de flux
Java à partir de débutant, héritage
La vie Java à partir de zéro
[Java] Introduction à l'API Stream
De Java inefficace à Java efficace
JavaScript vu de Java
Contenu d'apprentissage de base Java 8 (API Java)