相同的代码(用Objective C的呼吁让替代的文件名),可以在其他平台上使用过。因为我们使用内存映射,我们需要通过创建某个设定的文件有特殊TensorFlow环境对象开始,我们将使用:
std::unique_ptr<:memmappedenv> memmapped_env;
memmapped_env->reset(
new tensorflow::MemmappedEnv(tensorflow::Env::Default()));
tensorflow::Status mmap_status &#61;
(memmapped_env->get())->InitializeFromFile(file_path);
然后&#xff0c;您需要在此环境下传递给后续调用&#xff0c;像这个加载图表一样。
tensorflow::GraphDef tensorflow_graph;
tensorflow::Status load_graph_status &#61; ReadBinaryProto(
memmapped_env->get(),
tensorflow::MemmappedFileSystem::kMemmappedPackageDefaultGraphDef,
&tensorflow_graph);
您还需要一个指向你所创建的环境中创建的会话&#xff1a;
tensorflow::SessionOptions options;
options.config.mutable_graph_options()
->mutable_optimizer_options()
->set_opt_level(::tensorflow::OptimizerOptions::L0);
options.env &#61; memmapped_env->get();
tensorflow::Session* session_pointer &#61; nullptr;
tensorflow::Status session_status &#61;
tensorflow::NewSession(options, &session_pointer);
这里有一点要注意的是&#xff0c;我们也在一些禁用自动优化&#xff0c;因为这些情况会折叠不变的子树&#xff0c;因此创建我们不想要的张量值的副本并使用更多的RAM。此设置也意味着很难在Android中使用存储为APK资源的模型&#xff0c;因为这些模型是压缩的&#xff0c;并且没有正常的文件名。相反&#xff0c;您需要将您的文件从APK复制到正常的文件系统位置。
一旦你完成了这些步骤&#xff0c;你就可以像平常一样使用会话和图表&#xff0c;并且你会看到加载时间和内存使用量的减少。