安装适用于 C 的 TensorFlow
TensorFlow 提供了一个以 c_api.h
定义的 C 语言 API,适用于为其他语言构建绑定。此 API 偏重于简洁性和一致性,便利性次之。
支持的平台
本指南将介绍如何安装适用于 C 的 TensorFlow。虽然这些说明可能也适用于其他配置,但我们只在满足以下要求的计算机上验证过这些说明(而且我们只支持在此类计算机上按这些说明操作):
- Linux - 64 位、x86
- macOS X - 版本 10.12.6 (Sierra) 或更高版本
安装
按照以下步骤安装适用于 C 的 TensorFlow 库并启用适用于 C 的 TensorFlow:
-
确定是只在 CPU 上运行适用于 C 的 TensorFlow,还是在 GPU 的辅助下运行。为帮助您做出决定,请参阅以下相关指南中标题为“确定要安装哪种 TensorFlow”部分的内容:
-
调用以下 shell 命令,以下载 TensorFlow C 库并解压缩到
/usr/local/lib
:TF_TYPE="cpu" # Change to "gpu" for GPU support
OS="linux" # Change to "darwin" for macOS
TARGET_DIRECTORY="/usr/local"
curl -L \
"https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-${TF_TYPE}-${OS}-x86_64-1.8.0.tar.gz" |
sudo tar -C $TARGET_DIRECTORY -xztar
命令会将 TensorFlow C 库解压缩到TARGET_DIRECTORY
的lib
子目录中。例如,将TARGET_DIRECTORY
指定为/usr/local
会导致tar
将 TensorFlow C 库解压缩到/usr/local/lib
。如果您希望将库解压缩到其他目录中,请相应地调整
TARGET_DIRECTORY
。 -
如果您在第 2 步中将
TARGET_DIRECTORY
指定为系统目录(例如/usr/local
),请运行ldconfig
以配置链接器。例如:如果您为
TARGET_DIRECTORY
指定的不是系统目录(例如~/mydir
),则必须将解压缩目录(例如~/mydir/lib
)附加到两个环境变量上。例如:
验证您的安装
在安装适用于 C 的 TensorFlow 后,将以下代码输入 hello_tf.c
文件:
#include <stdio.h>
#include <tensorflow/c/c_api.h>
int main() {
printf("Hello from TensorFlow C library version %s\n", TF_Version());
return 0;
}
构建并运行
调用以下命令来构建 hello_tf.c
:
gcc hello_tf.c
生成的可执行文件在运行后应会输出以下消息:
a.out Hello from TensorFlow C library version number
问题排查
如果程序构建失败,最可能的原因是 gcc
无法找到 TensorFlow C 库。解决此问题的一种方法是为 gcc
指定 -I
和 -L
选项。例如,如果 TARGET_LIBRARY
为 /usr/local
,您应按如下方式调用 gcc
:
gcc -I/usr/local/include -L/usr/local/lib hello_tf.c -ltensorflow
如果 a.out
执行失败,请思考下列问题:
- 程序是否正确编译?
- 您是否为安装部分第 3 步中提到的环境变量指定了正确目录?
- 您是否导出了这些环境变量?
如果仍然看到编译或执行错误消息,请在 StackOverflow 上进行搜索(或提问),以获取可行的解决方案。
安装适用于 Java 的 TensorFlow
TensorFlow 可提供在 Java 程序中使用的 API。这些 API 特别适合用于加载以 Python 语言创建的模型并在 Java 应用中运行这些模型。本指南将介绍如何安装适用于 Java 的 TensorFlow 并在 Java 应用中使用 TensorFlow。
警告:TensorFlow Java API 不在 TensorFlow API 稳定性保障的涵盖范围内。
支持的平台
本指南介绍如何安装适用于 Java 的 TensorFlow。虽然这些说明可能也适用于其他配置,但我们只在满足以下要求的计算机上验证过这些说明(而且我们只支持在此类计算机上按这些说明操作):
- Ubuntu 16.04 或更高版本;64 位、x86
- macOS 10.12.6 (Sierra) 或更高版本
- Windows 7 或更高版本;64 位、x86
针对 Android 的安装说明位于单独的 Android TensorFlow 支持页面中。安装完成后,请查看这个适用于 Android 的完整 TensorFlow 示例。
在 Maven 项目中使用 TensorFlow
如果您的项目使用 Apache Maven,请将以下内容添加到项目的 pom.xml
以使用 TensorFlow Java API:
<dependency>
<groupId>org.tensorflow</groupId>
<artifactId>tensorflow</artifactId>
<version>1.8.0</version>
</dependency>
就这么简单。
示例
举个例子,以下步骤可以创建一个使用 TensorFlow 的 Maven 项目:
-
创建项目的
pom.xml
:<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.myorg</groupId>
<artifactId>hellotf</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<exec.mainClass>HelloTF</exec.mainClass>
<!-- The sample code requires at least JDK 1.7. -->
<!-- The maven compiler plugin defaults to a lower version -->
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.tensorflow</groupId>
<artifactId>tensorflow</artifactId>
<version>1.8.0</version>
</dependency>
</dependencies>
</project> -
创建源文件 (
src/main/java/HelloTF.java
):import org.tensorflow.Graph;
import org.tensorflow.Session;
import org.tensorflow.Tensor;
import org.tensorflow.TensorFlow;
public class HelloTF {
public static void main(String[] args) throws Exception {
try (Graph g = new Graph()) {
final String value = "Hello from " + TensorFlow.version();
// Construct the computation graph with a single operation, a constant
// named "MyConst" with a value "value".
try (Tensor t = Tensor.create(value.getBytes("UTF-8"))) {
// The Java API doesn't yet include convenience functions for adding operations.
g.opBuilder("Const", "MyConst").setAttr("dtype", t.dataType()).setAttr("value", t).build();
}
// Execute the "MyConst" operation in a Session.
try (Session s = new Session(g);
Tensor output = s.runner().fetch("MyConst").run().get(0)) {
System.out.println(new String(output.bytesValue(), "UTF-8"));
}
}
}
} -
编译并执行:
上述命令应该会输出 Hello from 版本。如果是这样,则说明您已成功设置适用于 Java 的 TensorFlow,随时可以在 Maven 项目中使用此 API。如果不是,请访问 Stack Overflow 查找可行的解决方案。您可以跳过本文档的其余部分。
GPU 支持
如果您的 Linux 系统搭载了 NVIDIA® GPU 且您的 TensorFlow Java 程序需要 GPU 加速,请将以下内容添加到项目的 pom.xml
:
<dependency>
<groupId>org.tensorflow</groupId>
<artifactId>libtensorflow</artifactId>
<version>1.8.0</version>
</dependency>
<dependency>
<groupId>org.tensorflow</groupId>
<artifactId>libtensorflow_jni_gpu</artifactId>
<version>1.8.0</version>
</dependency>
只有当您的系统是 Linux 且满足 GPU 要求时,才能通过 Maven 使用 GPU 加速。
在 JDK 中使用 TensorFlow
本部分介绍如何使用 JDK 安装产生的 java
和 javac
命令来使用 TensorFlow。如果您的项目使用 Apache Maven,请参阅上面的简单说明。
在 Linux 或 macOS 上安装
按照以下步骤在 Linux 或 macOS 上安装适用于 Java 的 TensorFlow:
-
下载 libtensorflow.jar,这是 TensorFlow Java 归档 (JAR)。
-
确定是只在 CPU 上运行适用于 Java 的 TensorFlow,还是在 GPU 的辅助下运行。为帮助您做出决定,请参阅以下相关指南中标题为“确定要安装哪种 TensorFlow”部分的内容:
-
通过运行以下 shell 命令,根据您的操作系统和处理器支持下载并解压缩相应的 Java 原生接口 (JNI) 文件:
TF_TYPE="cpu" # Default processor is CPU. If you want GPU, set to "gpu"
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
mkdir -p ./jni
curl -L \
"https://download.tensorflow.google.cn/libtensorflow/libtensorflow_jni-${TF_TYPE}-${OS}-x86_64-1.8.0.tar.gz" |
tar -xz -C ./jni
在 Windows 上安装
按照以下步骤在 Windows 上安装适用于 Java 的 TensorFlow:
- 下载 libtensorflow.jar,这是 TensorFlow Java 归档 (JAR)。
- 下载 Windows 上适用于 Java 的 TensorFlow 对应的 Java 原生接口 (JNI) 文件。
- 解压缩该 .zip 文件。
验证安装
在安装适用于 Java 的 TensorFlow 后,您可通过将以下代码输入 HelloTF.java
文件来验证您的安装:
import org.tensorflow.Graph;
import org.tensorflow.Session;
import org.tensorflow.Tensor;
import org.tensorflow.TensorFlow;
public class HelloTF {
public static void main(String[] args) throws Exception {
try (Graph g = new Graph()) {
final String value = "Hello from " + TensorFlow.version();
// Construct the computation graph with a single operation, a constant
// named "MyConst" with a value "value".
try (Tensor t = Tensor.create(value.getBytes("UTF-8"))) {
// The Java API doesn't yet include convenience functions for adding operations.
g.opBuilder("Const", "MyConst").setAttr("dtype", t.dataType()).setAttr("value", t).build();
}
// Execute the "MyConst" operation in a Session.
try (Session s = new Session(g);
Tensor output = s.runner().fetch("MyConst").run().get(0)) {
System.out.println(new String(output.bytesValue(), "UTF-8"));
}
}
}
}
然后按下面的说明编译并运行 HelloTF.java
。
编译
编译使用 TensorFlow 的 Java 程序时,下载的 .jar
必须是 classpath
的一部分。例如,您可以使用 -cp
编译标志将下载的 .jar
添加到 classpath
中,如下所示:
javac -cp libtensorflow-1.8.0.jar HelloTF.java
运行
要运行依赖 TensorFlow 的 Java 程序,请确保 JVM 能访问以下两个文件:
- 下载的
.jar
文件 - 提取的 JNI 库
例如,以下命令行可在 Linux 和 macOS X 上运行 HelloTF
程序:
java -cp libtensorflow-1.8.0.jar:. -Djava.library.path=./jni HelloTF
以下命令行可在 Windows 上运行 HelloTF
程序:
java -cp libtensorflow-1.8.0.jar;. -Djava.library.path=jni HelloTF
如果程序输出 Hello from 版本,则表示您已成功安装适用于 Java 的 TensorFlow,随时可以使用此 API 了。如果程序输出其他内容,请访问 Stack Overflow 查找可行的解决方案。
高级示例
如需更复杂的示例,请参阅 LabelImage.java(它可识别图像中的物体)。
从源代码构建
TensorFlow 是开源系统。您可以按照另一个文档中的说明从 TensorFlow 源代码编译适用于 Java 的 TensorFlow。