Arhn - архитектура программирования

unsupported/Eigen/CXX11/Tensor: Нет такого файла или каталога при работе с TensorFlow

Я пытаюсь использовать tensorflow в качестве внешней библиотеки в своем приложении на С++ (в основном следуя это руководство). Что я сделал до сих пор:

  1. Я клонировал репозиторий тензорного потока (скажем, корневой каталог репо $TENSORFLOW)
  2. Запустите /.configure (все настройки по умолчанию, поэтому без CUDA, без OpenCL и т. д.).
  3. Создайте общую библиотеку с помощью bazel build -c /opt //tensorflow:libtensorflow_cc.so (сборка завершена успешно)
  4. Теперь я пытаюсь #include "tensorflow/core/public/session.h". Но после его включения (и добавления $TENSORFLOW и $TENSORFLOW/bazel-genfiles для включения пути) я получаю сообщение об ошибке:

    $TENSORFLOW/tensorflow/third_party/eigen3/unsupported/Eigen/CXX11/Tensor:1:42:
    fatal error: unsupported/Eigen/CXX11/Tensor: No such file or directory
    

Существует ошибка github, созданная для аналогичной проблемы, но она помечена как закрытая без какого-либо решения. . Также я пробовал с веткой master, а также с выпуском v.1.4.0.

Вы случайно не знаете, что может вызвать такую ​​проблему и как с ней бороться?


  • Хорошо спросил; также может быть проблема с tensorflow 1.12 (и я подозреваю, что почти в каждой версии) 02.12.2019

Ответы:


1

Меня (и многих других) мучила та же проблема. Вероятно, это можно решить с помощью bazel, но я недостаточно хорошо знаю этот инструмент, и теперь я решаю это с помощью make. Источником путаницы является то, что файл с именем Tensor включен, и он сам включает файл с именем Tensor, из-за чего некоторые люди ошибочно заключают, что Tensor включает себя.

Если вы создали и установили файл .whl python, в dist-packages будет каталог tensorflow, а ниже — каталог include, например. в моей системе:

/usr/local/lib/python2.7/dist-packages/tensorflow/include

Из каталога include

find . -type f -name 'Tensor' -print
./third_party/eigen3/unsupported/Eigen/CXX11/Tensor
./external/eigen_archive/unsupported/Eigen/CXX11/Tensor

У первого есть

#include "unsupported/Eigen/CXX11/Tensor"

и файл, который должен удовлетворять этому, является вторым.

Таким образом, чтобы скомпилировать session.cc, который включает session.h, будет работать следующее:

INC_TENS1=/usr/local/lib/python2.7/dist-packages/tensorflow/include/
INC_TENS2=${INC_TENS1}external/eigen_archive/
gcc -c -std=c++11 -I $INC_TENS1 -I $INC_TENS2 session.cc

Я видел заявления о том, что вы должны создавать приложения из дерева тензорных потоков и использовать bazel. Однако я считаю, что все файлы заголовков, которые вам нужны, находятся в dist-packages/tensorflow/include, и, по крайней мере, для начала вы можете создавать проекты makefile или cmake.

28.06.2018
  • Это отлично работает с g++, но тот же путь при добавлении в cmake выдает ошибку n /usr/local/include/google/tensorflow/third_party/eigen3/unsupported/Eigen/CXX11/Tensor:1:10: fatal error: 'unsupported/Eigen/CXX11/Tensor' file not found #include "unsupported/Eigen/CXX11/Tensor" Вы когда-нибудь пробовали это с cmake? 07.08.2019
  • Это сработало для меня для tensorflow 1.12; хотя мой каталог include находится где-то еще (зависит от того, как он установлен). Согласитесь с ответом, это, кажется, предполагает, что вы используете bazel для создания проекта, но у меня также нет опыта, и я продолжаю сталкиваться с проблемами, которые усложняют его. Я предполагаю, что пакет поиска cmake для tensorflow сообщит об этих каталогах включения? 02.12.2019

  • 2

    проблема была на самом деле в относительном пути файла заголовка, взятого в файле Tensor.

    установленный путь для Tensor: /usr/include/eigen3/unsupported/Eigen/CXX11/Tensor

    но в файле Tensor упоминается "unsupported/Eigen/CXX11/Tensor"

    Таким образом, в пути к проекту должна быть запись до /usr/include/eigen3/, чтобы запустить это правильно, чтобы его можно было использовать.

    06.07.2018
  • Это, по-видимому, заставит его попытаться включить себя; сбивает с толку, что на самом деле в другом месте есть еще один файл Tensor.h (плохой выбор имени). 02.12.2019
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..