Глядя на официальные документы: что вы видите? Обычная плата за проезд? Теперь угадайте, что: это зона без базелей. Мы используем Cmake здесь!
Эта коллекция содержит надежные и мертвые примеры для использования TensorFlow в C, C ++, Go и Python: загрузите предварительно обученную модель или составьте пользовательскую работу с CUDA или без. Все сборки тестируются на самую последнюю стабильную версию Tensorflow и полагаются на Cmake с пользовательским FindTensorFlow.cmake. Этот файл Cmake включает в себя общую работу вокруг ошибок в определенных версиях TF.
| Tensorflow | Статус |
|---|---|
| 1.14.0 | |
| 1.13.1 | |
| 1.12.0 | |
| 1.11.0 | |
| 1.10.0 | |
| 1.9.0 |
Репозиторий содержит следующие примеры.
| Пример | Объяснение |
|---|---|
| Пользовательская операция | Создайте пользовательскую работу для TensorFlow в C ++/CUDA (требует только PIP) |
| вывод (C ++) | Запустите вывод в C ++ |
| вывод (с) | Вывод вывода в c |
| вывод (Go) | вывести вывод в ходе |
| Автор событий | Записать файлы событий для Tensorboard в C ++ |
| Керас CPP-Inference Пример | Запустите модель кераса в C ++ |
| Простой пример | Создать и запустить график тензора в C ++ |
| Изменить пример изображения | Изменить размер изображения в TensorFlow с/без OpenCV |
Этот пример иллюстрирует процесс создания пользовательской работы с использованием 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 Существует два примера, демонстрирующие обработку проведения TensorFlow: использование векторного входа и использование кодированного входа изображения.
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-Package (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]