В настоящее время я сталкиваюсь с проблемой при попытке использовать граф тензорного потока для вывода в 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());
}
}