TensorFlow Javaは、建物の訓練や機械学習モデルを展開するための任意のJVM上で実行することができます。グラフモードまたはイーガーモードでCPUとGPUの両方の実行をサポートし、JVM環境でTensorFlowを使用するための豊富なAPIを提供します。 JavaおよびScalaやKotlinなどの他のJVM言語は、世界中の大小の企業で頻繁に使用されているため、TensorFlowJavaは大規模な機械学習を採用するための戦略的な選択肢となっています。
要件
TensorFlowJavaはJava8以降で実行され、すぐに使用できる次のプラットフォームをサポートします。
- Ubuntu16.04以降。 64ビット、x86
- macOS 10.12.6(Sierra)以降。 64ビット、x86
- Windows7以降。 64ビット、x86
バージョン
TensorFlow Javaは、独自のリリースサイクルから独立しているTensorFlowランタイムを。その結果、そのバージョンは、それが実行されているTensorFlowランタイムのバージョンと一致しません。 TensorFlowのJava相談するバージョン管理テーブルをTensorFlowランタイムで使用可能なすべてのバージョンとのマッピングを一覧表示します。
アーティファクト
あり、いくつかの方法プロジェクトにTensorFlowのJavaを追加するには。最も簡単な1は、上の依存関係を追加することですtensorflow-core-platform
TensorFlow JavaのコアAPIと、それがサポートされているすべてのプラットフォーム上で実行するために必要なネイティブの依存関係の両方を含んでいるアーティファクト、。
純粋なCPUバージョンの代わりに、次の拡張機能のいずれかを選択することもできます。
-
tensorflow-core-platform-mkl
:すべてのプラットフォーム上でインテル®MKL-DNNのサポート tensorflow-core-platform-gpu
:LinuxとWindowsプラットフォーム上CUDA®のサポートtensorflow-core-platform-mkl-gpu
:Linuxプラットフォーム上でインテル®MKL-DNNとCUDA®のサポート。
また、上の別の依存tensorflow-framework
ライブラリはJVM上TensorFlowベースの機械学習のためのユーティリティの豊富なセットからの利益に追加することができます。
Mavenを使用したインストール
あなたにTensorFlowを含めるにはMavenのアプリケーション、その上の依存関係を追加する成果物プロジェクトのへpom.xml
ファイル。例えば、
<dependency>
<groupId>org.tensorflow</groupId>
<artifactId>tensorflow-core-platform</artifactId>
<version>0.3.3</version>
</dependency>
依存関係の数を減らす
上の依存関係を追加することに注意することが重要であるtensorflow-core-platform
アーティファクトが大幅にあなたのプロジェクトのサイズを増やすことができ、すべてのサポートされているプラットフォーム用のネイティブライブラリをインポートします。
あなたが利用可能なプラットフォームのサブセットをターゲットとしたいなら、あなたは使用して、他のプラットフォームからの不要なアーティファクト除外することができますMavenの依存関係の除外機能を。
あなたがあなたのアプリケーションに含めるプラットフォームを選択するもう一つの方法は、あなたのMavenのコマンドラインにしたりして、JavaCPPのシステムプロパティを設定することがあるpom.xml
。 JavaCPPの参照してくださいマニュアルを参照して詳細については。
スナップショットの使用
TensorFlow Javaソースリポジトリから最新のTensorFlow Java開発スナップショットは、上で使用可能なOSS Sonatypeネクサスリポジトリ。これらの成果物に依存するために、あなたにOSSスナップショットリポジトリを設定してくださいpom.xml
。
<repositories>
<repository>
<id>tensorflow-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.tensorflow</groupId>
<artifactId>tensorflow-core-platform</artifactId>
<version>0.4.0-SNAPSHOT</version>
</dependency>
</dependencies>
Gradleを使用したインストール
あなたにTensorFlowを含めるにはGradleのアプリケーション、その上の依存関係を追加する成果物プロジェクトのにbuild.gradle
ファイル。例えば、
repositories {
mavenCentral()
}
dependencies {
compile group: 'org.tensorflow', name: 'tensorflow-core-platform', version: '0.3.3'
}
依存関係の数を減らす
Gradleを使用してTensorFlowJavaからネイティブアーティファクトを除外することは、Mavenの場合ほど簡単ではありません。この依存関係の数を減らすには、GradleJavaCPPプラグインを使用することをお勧めします。
GradleのJavaCPPのでお読みくださいドキュメント詳細については。
ソースからのインストール
ソースからのTensorFlowのJavaを構築し、おそらくそれをカスタマイズするには、以下をお読みくださいの指示を。
サンプルプログラム
この例は、TensorFlowを使用してApacheMavenプロジェクトをビルドする方法を示しています。まず、プロジェクトのにTensorFlow依存関係を追加pom.xml
ファイル:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.myorg</groupId>
<artifactId>hellotensorflow</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<exec.mainClass>HelloTensorFlow</exec.mainClass>
<!-- Minimal version for compiling TensorFlow Java is JDK 8 -->
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!-- Include TensorFlow (pure CPU only) for all supported platforms -->
<dependency>
<groupId>org.tensorflow</groupId>
<artifactId>tensorflow-core-platform</artifactId>
<version>0.3.3</version>
</dependency>
</dependencies>
</project>
ソースファイルの作成src/main/java/HelloTensorFlow.java
:
import org.tensorflow.ConcreteFunction;
import org.tensorflow.Signature;
import org.tensorflow.Tensor;
import org.tensorflow.TensorFlow;
import org.tensorflow.op.Ops;
import org.tensorflow.op.core.Placeholder;
import org.tensorflow.op.math.Add;
import org.tensorflow.types.TInt32;
public class HelloTensorFlow {
public static void main(String[] args) throws Exception {
System.out.println("Hello TensorFlow " + TensorFlow.version());
try (ConcreteFunction dbl = ConcreteFunction.create(HelloTensorFlow::dbl);
TInt32 x = TInt32.scalarOf(10);
Tensor dblX = dbl.call(x)) {
System.out.println(x.getInt() + " doubled is " + ((TInt32)dblX).getInt());
}
}
private static Signature dbl(Ops tf) {
Placeholder<TInt32> x = tf.placeholder(TInt32.class);
Add<TInt32> dblX = tf.math.add(x, x);
return Signature.builder().input("x", x).output("dbl", dblX).build();
}
}
コンパイルして実行します。
mvn -q compile exec:java
このコマンドは、TensorFlowバージョンと簡単な計算を出力します。
成功! TensorFlowJavaが構成されています。