Tensorflow para Java é uma API ainda experimental, mas desenvolvida para usar TF no JVM, o que significa que podemos usá-lo Clojure, Yay!
Existem alguns light-wrappers para TF no Clojure para tornar a interoperabilidade mais idiomática, mas você pode hesitar em tentar trabalhar com duas camadas de indireção (especialmente porque a API Java não é totalmente estável). Esta é uma implementação sem wrapper do exemplo HelloTF localizado no site TensorFlow.
Instalando TensorFlow
Embora não tenhamos o Maven, o leiningen nos permite incluir o java jar imediatamente e você não deve se preocupar em realizar nenhuma etapa especial de instalação (apenas para CPU). Se você usar lein new app tf-demo
para criar um aplicativo clojure básico, deverá apenas adicionar
[org.tensorflow/tensorflow "1.2.1"] ;; or whatever is latest version at the time of reading
para o seu project.clj
Implementando o exemplo HelloTF
(ns tf-demo.core
(:gen-class)
(:import (org.tensorflow Tensor
TensorFlow
Graph
Session)))
(defn -main
"Execute basic HelloTF Example"
[& args]
(try (let [graph (let [g (Graph.)
value (str "Hello from " (TensorFlow/version))
t (Tensor/create (.getBytes value))]
(-> (.opBuilder g "Const" "MyConst")
(.setAttr "dtype" (.dataType t))
(.setAttr "value" t)
(.build))
g)]
(try (let [output (-> (Session. graph)
(.runner)
(.fetch "MyConst")
(.run)
(.get 0))]
(println (String. (.bytesValue output) "UTF-8")))))))
Executando o código
lein run
=> “Olá de <número da versão>”