199

Google の新しい Tensorflow ライブラリを C++ で使い始めたいと思っています。Web サイトとドキュメントは、プロジェクトの C++ API を構築する方法に関して非常に不明確であり、どこから始めればよいかわかりません。

tensorflow の C++ API を使用するためのガイドを見つけて共有することで、より経験のある人が助けてくれますか?

4

12 に答える 12

19

スタンドアロン パッケージで Tensorflow c++ api を使用することを検討している場合は、使用できる c++ バージョンをビルドするために、おそらく tensorflow_cc.so (ac api バージョン tensorflow.so もあります) が必要になります。

bazel build -c opt //tensorflow:libtensorflow_cc.so

注 1: 組み込みサポートを追加する場合は、このフラグを次のように追加できます。--copt=-msse4.2 --copt=-mavx

注 2: プロジェクトで OpenCV を使用することも検討している場合は、両方のライブラリを一緒に使用すると問題が発生し (テンソルフローの問題)、使用する必要があります--config=monolithic

ライブラリをビルドしたら、それをプロジェクトに追加する必要があります。これを行うには、次のパスを含めることができます。

tensorflow
tensorflow/bazel-tensorflow/external/eigen_archive
tensorflow/bazel-tensorflow/external/protobuf_archive/src
tensorflow/bazel-genfiles

ライブラリをプロジェクトにリンクします。

tensorflow/bazel-bin/tensorflow/libtensorflow_framework.so (unused if you build with --config=monolithic)
tensorflow/bazel-bin/tensorflow/libtensorflow_cc.so

また、プロジェクトをビルドするときは、c++11 標準を使用することをコンパイラーに指定する必要もあります。

補足: tensorflow バージョン 1.5 からの相対パス (お使いのバージョンで何か変更があったかどうかを確認する必要がある場合があります)。

また、このリンクは、このすべての情報を見つけるのに大いに役立ちました:リンク

于 2018-04-11T01:02:14.067 に答える
14

プロジェクトを Bazel でビルドすることと、大きなバイナリを生成することの両方を避けたい場合は、CMake で TensorFlow C++ ライブラリを使用する方法を説明するリポジトリを作成しました。ここで見つけることができます。一般的な考え方は次のとおりです。

  • TensorFlow リポジトリのクローンを作成します。
  • ビルド ルールを追加しtensorflow/BUILDます (提供されているルールには、すべての C++ 機能が含まれているわけではありません)。
  • TensorFlow 共有ライブラリを構築します。
  • Eigen と Protobuf の特定のバージョンをインストールするか、外部依存関係として追加します。
  • TensorFlow ライブラリを使用するように CMake プロジェクトを構成します。
于 2016-08-04T16:15:16.637 に答える
11

私が見つけた Tensorflow C++ API を使用する別の方法の 1 つは、cppflowを使用することです。

Tensorflow C APIの軽量な C++ ラッパーです。非常に小さな実行可能ファイルを取得し、libtensorflow.so既にコンパイルされたファイルにリンクします。使用例もあり、Bazel の代わりに CMAKE を使用しています。

于 2020-06-07T12:36:42.607 に答える
10

CMake の使用を気にしない場合は、 TF C++ API をビルドしてインストールするtensorflow_ccプロジェクトと、リンクできる便利な CMake ターゲットもあります。プロジェクトの README には、簡単に理解できる例と Dockerfile が含まれています。

于 2017-06-19T08:53:21.027 に答える
8

この ShellScript を使用して、依存関係の (ほとんどの) インストール、クローン作成、ビルド、コンパイル、必要なすべてのファイルの../src/includesフォルダーへの取得を行うことができます。

https://github.com/node-tensorflow/node-tensorflow/blob/master/tools/install.sh

于 2015-11-26T05:31:20.413 に答える
3

上記の回答は、ライブラリを構築する方法を示すには十分ですが、ヘッダーを収集する方法は依然として注意が必要です。ここでは、必要なヘッダーをコピーするために使用する小さなスクリプトを共有します。

SOURCEテンソルフローのソース(ビルド)ディレクトリである最初のパラメータです。収集されたヘッダーを保持する
DST2 番目のパラメーターです。include directory(例:cmakeでinclude_directories(./collected_headers_here))。

#!/bin/bash

SOURCE=$1
DST=$2
echo "-- target dir is $DST"
echo "-- source dir is $SOURCE"

if [[ -e $DST ]];then
    echo "clean $DST"
    rm -rf $DST
    mkdir $DST
fi


# 1. copy the source code c++ api needs
mkdir -p $DST/tensorflow
cp -r $SOURCE/tensorflow/core $DST/tensorflow
cp -r $SOURCE/tensorflow/cc $DST/tensorflow
cp -r $SOURCE/tensorflow/c $DST/tensorflow

# 2. copy the generated code, put them back to
# the right directories along side the source code
if [[ -e $SOURCE/bazel-genfiles/tensorflow ]];then
    prefix="$SOURCE/bazel-genfiles/tensorflow"
    from=$(expr $(echo -n $prefix | wc -m) + 1)

    # eg. compiled protobuf files
    find $SOURCE/bazel-genfiles/tensorflow -type f | while read line;do
        #echo "procese file --> $line"
        line_len=$(echo -n $line | wc -m)
        filename=$(echo $line | rev | cut -d'/' -f1 | rev )
        filename_len=$(echo -n $filename | wc -m)
        to=$(expr $line_len - $filename_len)

        target_dir=$(echo $line | cut -c$from-$to)
        #echo "[$filename] copy $line $DST/tensorflow/$target_dir"
        cp $line $DST/tensorflow/$target_dir
    done
fi


# 3. copy third party files. Why?
# In the tf source code, you can see #include "third_party/...", so you need it
cp -r $SOURCE/third_party $DST

# 4. these headers are enough for me now.
# if your compiler complains missing headers, maybe you can find it in bazel-tensorflow/external
cp -RLf $SOURCE/bazel-tensorflow/external/eigen_archive/Eigen $DST
cp -RLf $SOURCE/bazel-tensorflow/external/eigen_archive/unsupported $DST
cp -RLf $SOURCE/bazel-tensorflow/external/protobuf_archive/src/google $DST
cp -RLf $SOURCE/bazel-tensorflow/external/com_google_absl/absl $DST
于 2019-04-10T12:37:59.993 に答える