Tensorflow for Java is a still experimental, but fleshed out API for using TF on the JVM, that means we can use it Clojure, Yay!
There are some light-wrappers for TF in Clojure in order to make the inter-op more idiomatic, but you may be hesitant to try and work through two-layers of indirection (especially as the Java API is not fully stable). This is a wrapper-less implementation of the HelloTF example located on TensorFlow site.
While we don't have Maven, leiningen does allow us to include the java jar straightaway and you shouldn't have to worry about performing any special installation steps (for CPU only). If you use
lein new app tf-demo to create a basic clojure app, you should just need to add
[org.tensorflow/tensorflow "1.2.1"] ;; or whatever is latest version at the time of reading
Implementing the HelloTF example
(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")))))))
Running the code
lein run => "Hello from <version number>"