Я использую tenorflow r1.9 в Windows 10 / VisualStudio с чистым C ++ API. Я пытаюсь сохранить и перезагрузить обученную модель.
Я нашел в
https://github.com/rockzhuang/tensorflow/commit/fb6a6f4e3dd6e663a14b672ab5c616d968d62bc5#diff-a46c94d7dc93c6f7a3b632dc14e46479
пример того, как сохранить модель, поэтому я добавил все функции и ссылки в свой выпуск (поскольку в Windows 10 я не могу установить более раннюю версию, чем r1.9)
Мне удалось скомпилировать и запустить программу с моим приложением, но теперь я получаю эту ошибку времени выполнения:
2019-04-30 09:08:55.571067: F D:\src\tensorflow\tensorflow\core\graph\graph.cc:287] Non-OK-status: status status: Not found: Op type not registered 'NoOp' in binary running on TBK-SW19. Make sure the Op and Kernel are registered in the binary running in this process. Note that if you are loading a saved graph which used ops from tf.contrib, accessing (e.g.) 'tf.contrib.resampler' should be done before importing the graph, as contrib ops are lazily registered when the module is first accessed.
Ошибка в конструкторе (graph.cc:287, AddNode - функция):
Graph::Graph(const OpRegistryInterface* ops)
: ops_(ops, FunctionDefLibrary()),
versions_(new VersionDef),
arena_(8 << 10 /* 8kB */) {
versions_->set_producer(TF_GRAPH_DEF_VERSION);
versions_->set_min_consumer(TF_GRAPH_DEF_VERSION_MIN_CONSUMER);
// Initialize the name interning table for assigned_device_name.
device_names_.push_back("");
DCHECK_EQ(0, InternDeviceName(""));
// Source and sink have no endpoints, just control edges.
NodeDef def;
def.set_name("_SOURCE");
def.set_op("NoOp");
Status status;
Node* source = AddNode(def, &status);
TF_CHECK_OK(status);
CHECK_EQ(source->id(), kSourceId);
def.set_name("_SINK");
Node* sink = AddNode(def, &status);
TF_CHECK_OK(status);
CHECK_EQ(sink->id(), kSinkId);
AddControlEdge(source, sink);
}
Я ожидал бы проблемы со связыванием (не зарегистрированные ядра), но сообщение об ошибке (по крайней мере для меня) немного вводит в заблуждение.