Saya benar-benar ingin mulai menggunakan perpustakaan Tensorflow baru Google di C ++. Situs web dan dokumen benar-benar tidak jelas dalam hal bagaimana membangun C ++ API proyek dan saya tidak tahu harus mulai dari mana.
Dapatkah seseorang dengan pengalaman lebih banyak membantu dengan menemukan dan berbagi panduan untuk menggunakan C ++ API tensorflow?
c++
tensorflow
theideasmith
sumber
sumber
Jawaban:
Salah satu alternatif untuk menggunakan Tensorflow C ++ API yang saya temukan adalah menggunakan cppflow .
Ini adalah pembungkus C ++ yang ringan di sekitar Tensorflow C API . Anda mendapatkan executable yang sangat kecil dan tautannya terhadap file yang
libtensorflow.so
sudah dikompilasi. Ada juga contoh penggunaan dan Anda menggunakan CMAKE bukan Bazel.sumber
Untuk memulai, Anda harus mengunduh kode sumber dari Github, dengan mengikuti instruksi di sini (Anda akan memerlukan Bazel dan versi terbaru GCC).
C ++ API (dan bagian belakang sistem) ada di
tensorflow/core
. Saat ini, hanya antarmuka C ++ Session , dan C API yang didukung. Anda dapat menggunakan salah satu dari ini untuk menjalankan grafik TensorFlow yang telah dibangun menggunakan API Python dan diserialisasi keGraphDef
buffer protokol. Ada juga fitur eksperimental untuk membuat grafik di C ++, tetapi ini saat ini tidak cukup berfitur lengkap seperti API Python (mis. Tidak ada dukungan untuk diferensiasi otomatis saat ini). Anda dapat melihat contoh program yang membuat grafik kecil dalam C ++ di sini .Bagian kedua dari C ++ API adalah API untuk menambahkan yang baru
OpKernel
, yang merupakan kelas yang berisi implementasi kernel numerik untuk CPU dan GPU. Ada banyak contoh bagaimana membangun initensorflow/core/kernels
, serta tutorial untuk menambahkan op baru di C ++ .sumber
Untuk menambah posting @ mrry, saya menyusun tutorial yang menjelaskan cara memuat grafik TensorFlow dengan C ++ API. Ini sangat minim dan akan membantu Anda memahami bagaimana semua bagian saling cocok. Inilah dagingnya:
Persyaratan:
Struktur folder:
tensorflow/tensorflow/|project name|/
tensorflow/tensorflow/|project name|/|project name|.cc (e.g. https://gist.github.com/jimfleming/4202e529042c401b17b7)
tensorflow/tensorflow/|project name|/BUILD
MEMBANGUN:
Dua peringatan yang mungkin ada solusinya:
https://medium.com/@jimfleming/loading-a-tensorflow-graph-with-the-c-api-4caaff88463f
sumber
./loader
saya mendapatkan error:Not found: models/train.pb
.Jika Anda ingin menghindari membangun proyek Anda dengan Bazel dan menghasilkan biner besar, saya telah membuat repositori yang menginstruksikan penggunaan perpustakaan TensorFlow C ++ dengan CMake. Anda dapat menemukannya di sini . Gagasan umum adalah sebagai berikut:
tensorflow/BUILD
(yang disediakan tidak termasuk semua fungsionalitas C ++).sumber
Pertama, setelah menginstal
protobuf
daneigen
, Anda ingin membangun Tensorflow:Kemudian Salin yang berikut menyertakan tajuk dan pustaka bersama dinamis ke
/usr/local/lib
dan/usr/local/include
:Terakhir, kompilasi menggunakan contoh:
sumber
Jika Anda berpikir untuk menggunakan Tensorflow c ++ api pada paket mandiri Anda mungkin perlu tensorflow_cc.so (Ada juga ac api versi tensorflow.so) untuk membangun versi c ++ yang dapat Anda gunakan:
Catatan1: Jika Anda ingin menambahkan dukungan intrinsik, Anda dapat menambahkan flag ini sebagai:
--copt=-msse4.2 --copt=-mavx
Note2: Jika Anda berpikir untuk menggunakan OpenCV pada proyek Anda juga, ada masalah ketika menggunakan kedua lib secara bersamaan ( masalah tensorflow ) dan Anda harus menggunakannya
--config=monolithic
.Setelah membangun perpustakaan, Anda perlu menambahkannya ke proyek Anda. Untuk melakukan itu Anda bisa memasukkan jalur ini:
Dan tautkan perpustakaan ke proyek Anda:
Dan ketika Anda sedang membangun proyek Anda, Anda juga harus menentukan untuk kompiler Anda bahwa Anda akan menggunakan standar c ++ 11.
Catatan Sisi: Jalur relatif ke tensorflow versi 1.5 (Anda mungkin perlu memeriksa apakah di versi Anda ada yang berubah).
Juga tautan ini banyak membantu saya dalam menemukan semua info ini: tautan
sumber
tensorflow/bazel-tensorflow/external/com_google_absl
Anda dapat menggunakan ShellScript ini untuk menginstal (sebagian besar) dependensinya, mengkloning, membangun, mengkompilasi, dan memasukkan semua file yang diperlukan ke dalam
../src/includes
folder:https://github.com/node-tensorflow/node-tensorflow/blob/master/tools/install.sh
sumber
Jika Anda tidak keberatan menggunakan CMake, ada juga proyek tensorflow_cc yang membuat dan menginstal TF C ++ API untuk Anda, bersama dengan target CMake yang nyaman yang dapat Anda tautkan. Proyek README berisi contoh dan Dockerfiles yang dapat Anda ikuti dengan mudah.
sumber
Jika Anda tidak ingin membuat Tensorflow sendiri dan sistem operasi Anda adalah Debian atau Ubuntu, Anda dapat mengunduh paket prebuilt dengan pustaka Tensorflow C / C ++. Distribusi ini dapat digunakan untuk inferensi C / C ++ dengan CPU, dukungan GPU tidak termasuk:
https://github.com/kecsap/tensorflow_cpp_packaging/releases
Ada instruksi tertulis bagaimana membekukan sebuah pos pemeriksaan di Tensorflow (TFLearn) dan memuat model ini untuk inferensi dengan API C / C ++:
https://github.com/kecsap/tensorflow_cpp_packaging/blob/master/README.md
Waspadalah: Saya adalah pengembang proyek Github ini.
sumber
Saya menggunakan hack / solusi untuk menghindari harus membangun seluruh perpustakaan TF sendiri (yang menghemat waktu (itu diatur dalam 3 menit), ruang disk, menginstal dependensi dev, dan ukuran biner yang dihasilkan). Secara resmi tidak didukung, tetapi berfungsi dengan baik jika Anda hanya ingin melompat dengan cepat.
Instal TF melalui pip (
pip install tensorflow
ataupip install tensorflow-gpu
). Kemudian temukan perpustakaannya_pywrap_tensorflow.so
(TF 0. * - 1.0) atau_pywrap_tensorflow_internal.so
(TF 1.1+). Dalam kasus saya (Ubuntu) itu terletak di/usr/local/lib/python2.7/dist-packages/tensorflow/python/_pywrap_tensorflow.so
. Kemudian buat symlink ke pustaka ini yang disebut dilib_pywrap_tensorflow.so
suatu tempat di mana sistem build Anda menemukannya (mis/usr/lib/local
.). Awalanlib
itu penting! Anda juga dapat memberikannyalib*.so
nama lain - jika Anda menyebutnyalibtensorflow.so
, Anda mungkin mendapatkan kompatibilitas yang lebih baik dengan program lain yang ditulis untuk bekerja dengan TF.Kemudian buat proyek C ++ seperti yang biasa Anda lakukan (CMake, Make, Bazel, apa pun yang Anda suka).
Dan kemudian Anda siap untuk hanya menautkan ke perpustakaan ini agar TF tersedia untuk proyek Anda (dan Anda juga harus menautkan ke
python2.7
perpustakaan)! Di CMake, misalnya Anda hanya menambahkantarget_link_libraries(target _pywrap_tensorflow python2.7)
.File header C ++ terletak di sekitar perpustakaan ini, misalnya di
/usr/local/lib/python2.7/dist-packages/tensorflow/include/
.Sekali lagi: cara ini secara resmi tidak didukung dan Anda dapat menjalankan berbagai masalah. Pustaka tampaknya terhubung secara statis dengan mis. Protobuf, sehingga Anda dapat berjalan dalam masalah waktu-tautan atau waktu-berjalan yang aneh. Tetapi saya dapat memuat grafik yang disimpan, mengembalikan bobot dan menjalankan inferensi, yang merupakan IMO fungsi yang paling dicari di C ++.
sumber
undefined reference to 'PyType_IsSubtype'
python2.7
perpustakaan ... Saya akan mengedit posting yang sesuai.Tensorflow sendiri hanya menyediakan contoh yang sangat mendasar tentang C ++ APIs.
Berikut ini adalah sumber yang bagus yang mencakup contoh dataset, rnn, lstm, cnn dan lebih banyak
tensorflow c ++ contoh
sumber
jawaban di atas cukup baik untuk menunjukkan cara membangun perpustakaan, tetapi cara mengumpulkan header masih sulit. di sini saya membagikan skrip kecil yang saya gunakan untuk menyalin tajuk yang diperlukan.
SOURCE
adalah param pertama, yang merupakan direcoty sumber tensorflow (build);DST
adalah param kedua, yaituinclude directory
memegang tajuk yang dikumpulkan. (mis. dalam cmake,include_directories(./collected_headers_here)
).sumber
mkdir -p $DST/tensorflow$target_dir
sebelumnyacp $line $DST/tensorflow/$target_dir