tensorflow cmake
r1.13
查看官方文档:您看到了什么?通常的票价?现在,猜猜是什么:这是一个无巴泽尔的区域。我们在这里使用Cmake!
该集合包含可靠且死去的简单示例,用于在C,C ++,GO和Python中使用TensorFlow:加载预训练的模型或使用或不带有CUDA的自定义操作。所有构建均针对最新的稳定张量流版本进行了测试,并依靠CMAKE使用Custom FindTensorFlow.cmake进行测试。该CMAKE文件包括特定TF版本中错误的常见工作。
| 张量 | 地位 |
|---|---|
| 1.14.0 | |
| 1.13.1 | |
| 1.12.0 | |
| 1.11.0 | |
| 1.10.0 | |
| 1.9.0 |
存储库包含以下示例。
| 例子 | 解释 |
|---|---|
| 自定义操作 | 在C ++/CUDA中构建定制操作(仅需要PIP) |
| 推理(C ++) | 在C ++中进行推断 |
| 推理(c) | 在C中进行推断 |
| 推理(GO) | 在GO中进行推断 |
| 活动作家 | 在C ++中写入张板的事件文件 |
| KERAS CPP-inference示例 | 在C ++中运行KERAS模型 |
| 简单示例 | 在C ++中创建并运行TensorFlow图 |
| 调整图像示例 | 通过/不使用OPENCV,在TensorFlow中调整图像大小 |
此示例说明了使用C ++/CUDA和CMAKE创建自定义操作的过程。它不打算显示获得峰值绩效的实现。相反,它只是一个样板模板。
user@host $ pip install tensorflow-gpu --user # solely the pip package is needed
user@host $ cd custom_op/user_ops
user@host $ cmake .
user@host $ make
user@host $ python test_matrix_add.py
user@host $ cd ..
user@host $ python example.py 此示例说明了加载图像的过程(使用OpenCV或TensorFlow),调整图像将图像保存为JPG或PNG(使用OpenCV或TensorFlow)。
user@host $ cd examples/resize
user@host $ export TENSORFLOW_BUILD_DIR=...
user@host $ export TENSORFLOW_SOURCE_DIR=...
user@host $ cmake .
user@host $ make 有两个示例证明了张量流服务的处理:使用向量输入并使用编码的图像输入。
server@host $ CHOOSE=basic # or image
server@host $ cd serving/ ${CHOOSE} /training
server@host $ python create.py # create some model
server@host $ cd serving/server/
server@host $ ./run.sh # start server
# some some queries
client@host $ cd client/bash
client@host $ ./client.sh
client@host $ cd client/python
# for the basic-example
client@host $ python client_rest.py
client@host $ python client_grpc.py
# for the image-example
client@host $ python client_rest.py /path/to/img.[png,jpg]
client@host $ python client_grpc.py /path/to/img.[png,jpg] 在Python中创建一个模型,将图形保存到磁盘并将其加载到C/C+/GO/Python中以执行推理。由于这些示例是基于Tensorflow C-API的,因此他们需要libtensorflow_cc.so库,该库未在PIP包装(TensorFow-gpu)中发货。因此,您需要事先从源构建张力流,例如
user@host $ ls ${TENSORFLOW_SOURCE_DIR}
ACKNOWLEDGMENTS bazel-genfiles configure pip
ADOPTERS.md bazel-out configure.py py.pynano
ANDROID_NDK_HOME bazel-tensorflow configure.py.bkp README.md
...
user@host $ cd ${TENSORFLOW_SOURCE_DIR}
user@host $ ./configure
user@host $ # ... or whatever options you used here
user@host $ bazel build -c opt --copt=-mfpmath=both --copt=-msse4.2 --config=cuda //tensorflow:libtensorflow.so
user@host $ bazel build -c opt --copt=-mfpmath=both --copt=-msse4.2 --config=cuda //tensorflow:libtensorflow_cc.so
user@host $ export TENSORFLOW_BUILD_DIR=/tensorflow_dist
user@host $ mkdir ${TENSORFLOW_BUILD_DIR}
user@host $ cp ${TENSORFLOW_SOURCE_DIR} /bazel-bin/tensorflow/ * .so ${TENSORFLOW_BUILD_DIR} /
user@host $ cp ${TENSORFLOW_SOURCE_DIR} /bazel-genfiles/tensorflow/cc/ops/ * .h ${TENSORFLOW_BUILD_DIR} /includes/tensorflow/cc/ops/我们只是运行一个非常基本的模型
x = tf . placeholder ( tf . float32 , shape = [ 1 , 2 ], name = 'input' )
output = tf . identity ( tf . layers . dense ( x , 1 ), name = 'output' )因此,像定期这样做一样保存模型。这是在example.py中完成的。除了一些输出以外
user@host $ python example.py
[<tf.Variable 'dense/kernel:0' shape=(2, 1) dtype=float32_ref>, <tf.Variable 'dense/bias:0' shape=(1,) dtype=float32_ref>]
input [[1. 1.]]
output [[2.1909506]]
dense/kernel:0 [[0.9070684]
[1.2838823]]
dense/bias:0 [0.] user@host $ python python/inference.py
[<tf.Variable 'dense/kernel:0' shape=(2, 1) dtype=float32_ref>, <tf.Variable 'dense/bias:0' shape=(1,) dtype=float32_ref>]
input [[1. 1.]]
output [[2.1909506]]
dense/kernel:0 [[0.9070684]
[1.2838823]]
dense/bias:0 [0.] user@host $ cd cc
user@host $ cmake .
user@host $ make
user@host $ cd ..
user@host $ ./cc/inference_cc
input Tensor<type: float shape: [1,2] values: [1 1]>
output Tensor<type: float shape: [1,1] values: [2.19095063]>
dense/kernel:0 Tensor<type: float shape: [2,1] values: [0.907068372][1.28388226]>
dense/bias:0 Tensor<type: float shape: [1] values: 0> user@host $ cd c
user@host $ cmake .
user@host $ make
user@host $ cd ..
user@host $ ./c/inference_c
2.190951
user@host $ go get github.com/tensorflow/tensorflow/tensorflow/go
user@host $ cd go
user@host $ ./build.sh
user@host $ cd ../
user@host $ ./inference_go
input [[1 1]]
output [[2.1909506]]
dense/kernel:0 [[0.9070684] [1.2838823]]
dense/bias:0 [0]