Regarder les documents officiels: que voyez-vous? Le tarif habituel? Maintenant, devinez quoi: il s'agit d'une zone sans bazel. Nous utilisons Cmake ici!
Cette collection contient des exemples fiables et simples pour utiliser TensorFlow dans C, C ++, Go et Python: chargez un modèle pré-formé ou compilez une opération personnalisée avec ou sans CUDA. Toutes les versions sont testées par rapport à la version stable TensorFlow la plus récente et s'appuient sur CMake avec un FindtenSorflow.Cake. Ce fichier CMake comprend des travaux communs pour les bogues dans des versions TF spécifiques.
| Tensorflow | Statut |
|---|---|
| 1.14.0 | |
| 1.13.1 | |
| 1.12.0 | |
| 1.11.0 | |
| 1.10.0 | |
| 1.9.0 |
Le référentiel contient les exemples suivants.
| Exemple | Explication |
|---|---|
| opération personnalisée | Construisez une opération personnalisée pour TensorFlow en C ++ / CUDA (ne nécessite que PIP) |
| Inférence (C ++) | exécuter l'inférence en C ++ |
| inférence (c) | exécuter l'inférence en c |
| Inférence (Go) | exécuter l'inférence dans Go |
| rédacteur | Écrivez des fichiers d'événements pour Tensorboard en C ++ |
| Exemple d'inférence Keras CPP | Exécutez un modèle Keras en C ++ |
| exemple simple | Créer et exécuter un graphique TensorFlow en C ++ |
| Exemple de redimensionnement de l'image | redimensionner une image dans TensorFlow avec / sans opencv |
Cet exemple illustre le processus de création d'une opération personnalisée à l'aide de C ++ / CUDA et CMake. Il n'est pas destiné à montrer une implémentation obtenant une performance de pointe. Au lieu de cela, ce n'est qu'un modèle de chauffe-plateau.
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 Cet exemple illustre le processus de chargement d'une image (en utilisant OpenCV ou TensorFlow), redimensionnant l'image enregistrant l'image en JPG ou PNG (en utilisant OpenCV ou TensorFlow).
user@host $ cd examples/resize
user@host $ export TENSORFLOW_BUILD_DIR=...
user@host $ export TENSORFLOW_SOURCE_DIR=...
user@host $ cmake .
user@host $ make Il existe deux exemples démontrant la manipulation de la servante de tensorflow: en utilisant une entrée vectorielle et en utilisant une entrée d'image codée.
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] Créez un modèle dans Python, enregistrez le graphique sur le disque et chargez-le en C / C + / Go / Python pour effectuer l'inférence. Comme ces exemples sont basés sur la bibliothèque TensorFlow C-API, ils nécessitent la bibliothèque libtensorflow_cc.so qui n'est pas expédiée dans le Pip-Package (Tensorfow-GPU). Par conséquent, vous devrez construire TensorFlow à partir de la source au préalable, par exemple,
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/Nous exécutons juste un modèle très basique
x = tf . placeholder ( tf . float32 , shape = [ 1 , 2 ], name = 'input' )
output = tf . identity ( tf . layers . dense ( x , 1 ), name = 'output' ) Par conséquent, enregistrez le modèle comme vous le faites régulièrement. Ceci se fait dans example.py en plus de certaines sorties
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]