Пустой GraphDef при попытке загрузить Tensorflow Graph в C ++ - PullRequest
0 голосов
/ 30 октября 2018

В настоящее время я сталкиваюсь с проблемой при попытке использовать граф тензорного потока для вывода в C ++. Файл protobuf загружается нормально без каких-либо ошибок, но результирующий объект GraphDef имеет размер_узла 0. Я следовал документации, поэтому моя теория была, возможно, несовместимостью с файлом, который я пытаюсь использовать? Буду признателен за ваш вклад в решение этой проблемы (код приведен ниже).

Спасибо!

mTensorflowInterface::mTensorflowInterface(core::tFrameworkElement *parent, const std::string &name) : tModule(parent, name, false) // change to 'true' to make module's ports shared (so that ports in other processes can connect to its output and/or input ports)
    {
        const std::string pathToGraph = "/home/jakub/TF_Training/TrainUnreal/model.ckpt-271078.meta";
        const std::string pathToCheckpoint = "/home/jakub/TF_Training/TrainUnreal/";
        Status status;

        status = NewSession(SessionOptions(), &session);

        if (!status.ok()) {
            throw runtime_error("Could not create Tensorflow session: " + status.ToString());
        }

        FINROC_LOG_PRINT(DEBUG, "Session created");

        MetaGraphDef graph_def;

        status = ReadBinaryProto(Env::Default(), pathToGraph, &graph_def);

        if (!status.ok()) {
            throw runtime_error("Error reading graph definition from " + pathToGraph + ": " + status.ToString());
        }

        LOG_PRINT(DEBUG, "Graph definition read from file. Node size: ", graph_def.graph_def().node_size()); // here i get node size 0
        std::cout << graph_def.graph_def().versions().producer() << std::endl;

        status = session->Create(graph_def.graph_def());


        if (!status.ok()) {
            throw runtime_error("Error creating graph: " + status.ToString());
        }

        Tensor checkpointPathTensor(DT_STRING, TensorShape());
        checkpointPathTensor.scalar<std::string>()() = pathToCheckpoint;
        status = session->Run(
                {{ graph_def.saver_def().filename_tensor_name(), checkpointPathTensor },},
                {},
                {graph_def.saver_def().restore_op_name()},
                nullptr);

        if (!status.ok()) {
            throw runtime_error("Error loading checkpoint from " + pathToCheckpoint  + ": " + status.ToString());
        }


    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...