Estou realmente ansioso para começar a usar a nova biblioteca Tensorflow do Google em C ++. O site e os documentos são realmente pouco claros em termos de como criar a API C ++ do projeto e não sei por onde começar.
Alguém com mais experiência pode ajudar descobrindo e compartilhando um guia para usar a API C ++ do tensorflow?
c++
tensorflow
theideasmith
fonte
fonte
Respostas:
Uma alternativa ao uso da API C ++ do Tensorflow que encontrei é usar o cppflow .
É um invólucro C ++ leve em torno da API C do Tensorflow . Você obtém executáveis muito pequenos e vincula-se ao
libtensorflow.so
arquivo já compilado. Existem também exemplos de uso e você usa CMAKE em vez de Bazel.fonte
Para começar, faça o download do código fonte do Github, seguindo as instruções aqui (você precisará do Bazel e de uma versão recente do GCC).
A API C ++ (e a infra-estrutura do sistema) é em
tensorflow/core
. No momento, apenas a interface da sessão C ++ e a API C estão sendo suportadas. Você pode usar qualquer um destes para executar gráficos TensorFlow que foram criados usando a API Python e serializados em umGraphDef
buffer de protocolo. Há também um recurso experimental para a construção de gráficos em C ++, mas atualmente não é tão completo quanto a API Python (por exemplo, atualmente não há suporte para diferenciação automática). Você pode ver um programa de exemplo que cria um pequeno gráfico em C ++ aqui .A segunda parte da API C ++ é a API para adicionar um novo
OpKernel
, que é a classe que contém implementações de kernels numéricos para CPU e GPU. Existem inúmeros exemplos de como incorporá-lostensorflow/core/kernels
, bem como um tutorial para adicionar uma nova operação em C ++ .fonte
Para adicionar à postagem de @ mrry, montei um tutorial que explica como carregar um gráfico TensorFlow com a API C ++. É muito mínimo e deve ajudá-lo a entender como todas as peças se encaixam. Aqui está a carne:
Requisitos:
Estrutura de pastas:
tensorflow/tensorflow/|project name|/
tensorflow/tensorflow/|project name|/|project name|.cc (e.g. https://gist.github.com/jimfleming/4202e529042c401b17b7)
tensorflow/tensorflow/|project name|/BUILD
CONSTRUIR:
Duas advertências para as quais provavelmente existem soluções alternativas:
https://medium.com/@jimfleming/loading-a-tensorflow-graph-with-the-c-api-4caaff88463f
fonte
./loader
eu recebo um erro:Not found: models/train.pb
.Se você deseja evitar criar seus projetos com o Bazel e gerar um binário grande, montei um repositório instruindo o uso da biblioteca TensorFlow C ++ com o CMake. Você pode encontrá-lo aqui . As idéias gerais são as seguintes:
tensorflow/BUILD
(as fornecidas não incluem toda a funcionalidade do C ++).fonte
Primeiro, após a instalação
protobuf
eeigen
, você deseja criar o Tensorflow:Em seguida, copie os seguintes cabeçalhos de inclusão e biblioteca compartilhada dinâmica para
/usr/local/lib
e/usr/local/include
:Por fim, compile usando um exemplo:
fonte
Se você estiver pensando em usar a API do Tensorflow c ++ em um pacote independente, provavelmente precisará do tensorflow_cc.so (também existe uma versão da API ap tensensflow.so) para criar a versão do c ++ que você pode usar:
Nota1: Se você deseja adicionar suporte intrínseco, pode adicionar esses sinalizadores como:
--copt=-msse4.2 --copt=-mavx
Nota2: Se você está pensando em usar o OpenCV também no seu projeto, há um problema ao usar as duas bibliotecas juntas ( problema do tensorflow ) e você deve usá-lo
--config=monolithic
.Depois de criar a biblioteca, você precisa adicioná-la ao seu projeto. Para fazer isso, você pode incluir estes caminhos:
E vincule a biblioteca ao seu projeto:
E ao criar seu projeto, você também deve especificar ao seu compilador que irá usar os padrões c ++ 11.
Nota: Caminhos relativos à tensorflow versão 1.5 (pode ser necessário verificar se na sua versão alguma coisa mudou).
Também este link me ajudou muito a encontrar todas essas informações: link
fonte
tensorflow/bazel-tensorflow/external/com_google_absl
Você pode usar este ShellScript para instalar (a maioria) de suas dependências, clonar, criar, compilar e colocar todos os arquivos necessários na
../src/includes
pasta:https://github.com/node-tensorflow/node-tensorflow/blob/master/tools/install.sh
fonte
Se você não se importa em usar o CMake, também existe o projeto tensorflow_cc que cria e instala a API TF C ++ para você, juntamente com os convenientes destinos do CMake com os quais você pode se conectar. O projeto README contém um exemplo e Dockerfiles que você pode seguir facilmente.
fonte
Se você não quiser criar o Tensorflow por conta própria e seu sistema operacional for Debian ou Ubuntu, poderá fazer o download de pacotes pré-construídos com as bibliotecas Tensorflow C / C ++. Esta distribuição pode ser usada para inferência C / C ++ com CPU, o suporte a GPU não está incluído:
https://github.com/kecsap/tensorflow_cpp_packaging/releases
Existem instruções escritas como congelar um ponto de verificação no Tensorflow (TFLearn) e carregar este modelo para inferência com a API C / C ++:
https://github.com/kecsap/tensorflow_cpp_packaging/blob/master/README.md
Cuidado: eu sou o desenvolvedor deste projeto do Github.
fonte
Eu uso um hack / solução alternativa para evitar ter que construir toda a biblioteca TF (o que economiza tempo (é configurado em 3 minutos), espaço em disco, instalação de dependências de desenvolvimento e tamanho do binário resultante). É oficialmente não suportado, mas funciona bem se você quiser entrar rapidamente.
Instale o TF através do pip (
pip install tensorflow
oupip install tensorflow-gpu
). Em seguida, encontre sua biblioteca_pywrap_tensorflow.so
(TF 0. * - 1.0) ou_pywrap_tensorflow_internal.so
(TF 1.1+). No meu caso (Ubuntu) está localizado em/usr/local/lib/python2.7/dist-packages/tensorflow/python/_pywrap_tensorflow.so
. Em seguida, crie um link simbólico para essa biblioteca chamado emlib_pywrap_tensorflow.so
algum lugar onde seu sistema de construção o encontre (por exemplo/usr/lib/local
). O prefixolib
é importante! Você também pode dar outrolib*.so
nome a ele - se você o chamarlibtensorflow.so
, poderá obter uma melhor compatibilidade com outros programas criados para trabalhar com o TF.Em seguida, crie um projeto C ++ como você está acostumado (CMake, Make, Bazel, o que quiser).
E então você está pronto para vincular-se a essa biblioteca para ter o TF disponível para seus projetos (e também para vincular-se a
python2.7
bibliotecas)! No CMake, por exemplo, basta adicionartarget_link_libraries(target _pywrap_tensorflow python2.7)
.Os arquivos de cabeçalho C ++ estão localizados em torno desta biblioteca, por exemplo, em
/usr/local/lib/python2.7/dist-packages/tensorflow/include/
.Mais uma vez: dessa forma, não há suporte oficial e você pode executar vários problemas. A biblioteca parece estar estaticamente vinculada a, por exemplo, protobuf, portanto, você pode executar problemas estranhos no tempo do link ou no tempo de execução. Mas sou capaz de carregar um gráfico armazenado, restaurar os pesos e executar inferência, que é a IMO a funcionalidade mais desejada em C ++.
fonte
undefined reference to 'PyType_IsSubtype'
python2.7
biblioteca ... Eu vou editar a postagem de acordo.O próprio Tensorflow fornece apenas exemplos muito básicos sobre APIs C ++.
Aqui está um bom recurso que inclui exemplos de conjuntos de dados, exemplos de rnn, lstm, cnn e mais
tensorflow c ++
fonte
as respostas acima são boas o suficiente para mostrar como criar a biblioteca, mas como coletar os cabeçalhos ainda são complicados. aqui compartilho o pequeno script que utilizo para copiar os cabeçalhos necessários.
SOURCE
é o primeiro parâmetro, que é o direcoty da fonte do tensorflow (compilação);DST
é o segundo parâmetro, queinclude directory
contém os cabeçalhos coletados. (por exemplo, em cmakeinclude_directories(./collected_headers_here)
).fonte
mkdir -p $DST/tensorflow$target_dir
antescp $line $DST/tensorflow/$target_dir