Tensorflow 模型导入到 Java

2024-02-08

我一直在尝试在 Java 中导入和使用我训练过的模型(Tensorflow、Python)。

我能够在 Python 中保存模型,但当我尝试在 Java 中使用相同的模型进行预测时遇到问题。

Here https://gist.github.com/szingerpeter/ff76df0b5014f93722c977139beaf921,可以看到初始化、训练、保存模型的python代码。

Here https://gist.github.com/szingerpeter/b468f35c76d054c5c9aeb22adc9e2bb2,您可以看到用于导入和预测输入值的 Java 代码。

我收到的错误消息是:

Exception in thread "main" java.lang.IllegalStateException: Attempting to use uninitialized value Variable_7
     [[Node: Variable_7/read = Identity[T=DT_FLOAT, _class=["loc:@Variable_7"], _device="/job:localhost/replica:0/task:0/cpu:0"](Variable_7)]]
    at org.tensorflow.Session.run(Native Method)
    at org.tensorflow.Session.access$100(Session.java:48)
    at org.tensorflow.Session$Runner.runHelper(Session.java:285)
    at org.tensorflow.Session$Runner.run(Session.java:235)
    at org.tensorflow.examples.Identity_import.main(Identity_import.java:35)

我相信问题出在 python 代码中的某个地方,但我找不到它。


爪哇importGraphDef()函数仅导入计算图(由tf.train.write_graph在你的Python代码中),它没有加载经过训练的变量的值(存储在检查点中),这就是为什么你会收到一个错误,抱怨未初始化的变量。

The TensorFlow SavedModel 格式 https://github.com/tensorflow/tensorflow/tree/master/tensorflow/python/saved_model另一方面包括有关模型的所有信息(图形、检查点状态、其他元数据)并在您想要使用的 Java 中使用SavedModelBundle.load https://www.tensorflow.org/versions/r1.1/api_docs/java/reference/org/tensorflow/SavedModelBundle创建使用经过训练的变量值初始化的会话。

要从 Python 导出这种格式的模型,您可能需要查看相关问题将重新训练的 inception SavedModel 部署到 google cloud ml 引擎 https://stackoverflow.com/questions/43001719/deploy-retrained-inception-savedmodel-to-google-cloud-ml-engine/43002175

对于您的情况,这应该类似于 Python 中的以下内容:

def save_model(session, input_tensor, output_tensor):
  signature = tf.saved_model.signature_def_utils.build_signature_def(
    inputs = {'input': tf.saved_model.utils.build_tensor_info(input_tensor)},
    outputs = {'output': tf.saved_model.utils.build_tensor_info(output_tensor)},
  )
  b = saved_model_builder.SavedModelBuilder('/tmp/model')
  b.add_meta_graph_and_variables(session,
                                 [tf.saved_model.tag_constants.SERVING],
                                 signature_def_map={tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: signature})
  b.save() 

并通过调用它save_model(session, x, yhat)

然后在 Java 中使用以下命令加载模型:

try (SavedModelBundle b = SavedModelBundle.load("/tmp/mymodel", "serve")) {
  // b.session().run(...)
}

希望有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tensorflow 模型导入到 Java 的相关文章

随机推荐

  • connect-mongo 每秒创建新会话

    我的 Nodejs 应用程序托管在 Openshift 上 这是我的规格 节点 v0 10 35 express v3 4 8 我的 package json 依赖项 dependencies angular loading bar 0 9
  • 画布缩放通过 CSS 还是 JS 性能更高?

    以下文档提到了 HTML5 Canvas 性能缩放的一些准则 https developer mozilla org en US docs Web API Canvas API Tutorial Optimizing canvas Scal
  • 去掉小数点后的 0 值

    我想问是否有人知道删除十进制 0 值的查询 例如 字段名称百分比具有这些值 Percent 770 00000000000000000000 340 670000000000000000000 96 00000000000000000000
  • 如何使用 @angular/http 返回字符串而不是 Observable

    我正在将 Angular 4 与 net core WEB API 挂钩 Web API 根据传入的 ID 以字符串形式返回 CustomerName 这是 Angular 4 中的服务方法 我知道 Angular http 必须返回一个
  • 控制器如何手动设置某个字段的验证错误

    我有一个包含 3 个 ActiveRecord 字段的表单 其中一个字段有一种愚蠢的 依赖于国家的验证要求 例如 如果在设置向导表单上创建对象 我仅验证该字段 在我的 POST 处理程序中创建对象时 我想我可以调用errors add 来插
  • python 中的 Mechanizer - 选择没有名称的表单字段

    我有一个类似的问题选择机械化表单中的未命名文本字段 python https stackoverflow com questions 4787907 selecting an unnamed text field in a mechaniz
  • 使用 C++11 基于范围的正确方法是什么?

    使用 C 11 基于范围的正确方法是什么for 应该使用什么语法 for auto elem container or for auto elem container or for const auto elem container 或者其
  • SQL Server 不区分大小写的排序规则

    在 SQL Server 中使用不区分大小写的排序规则有哪些优点 缺点 就查询性能而言 我有一个数据库当前正在使用不区分大小写的排序规则 但我不太喜欢它 我非常想将其更改为区分大小写 更改排序规则时应该注意什么 如果更改数据库上的排序规则
  • 需要有关奇怪的 java.net.HttpURLConnection 行为的帮助

    我正在尝试使用 HttpURLConnection 下载 jpg 但遇到了一个非常奇怪的错误 这是网址 http www vh1 com sitewide promoimages shows m my antonio video super
  • 如何在 angularjs 中添加悬停元素的延迟?

    我有一个元素 span Hover Me span div class outerDiv p Some content p div class innerDiv p More Content p div div 这是JS mouseente
  • 即使安装包后,R 也找不到包

    我一直与zoo包 我很久以前就安装了 今天 我创建了一个新的 R 脚本 并运行library zoo 并得到以下错误 gt library zoo Error in library zoo there is no package calle
  • 暴力破解 PBKDF2 的速度大约有多快?

    在 linkedin 密码哈希泄露之后 我一直在研究我们的密码哈希 我们使用 Django 1 4 它使用 PBKDF2 这很棒 比之前的 SHA1 更进一步 然而我很好奇人们如何轻松地暴力破解这一点 我正在查看我们的密码复杂性规则 并且想
  • 使用 ES6 类的快速路由

    因此 以下代码在开发中有效 但在生产环境中运行时失败 并出现错误TypeError Router use requires middleware function but got a Object 到目前为止 我一定已经尝试了大约一百种不同
  • 从结构体数组中删除元素

    这可能是一个超级简单的问题 但它是 我有一个 结构数组 以及一个要删除的结构数组索引向量 例如 如果我有一个删除向量 2 6 这意味着我想删除数组中的第二个和第六个结构 并且数组将短 2 个元素 干净 简单的 matlab 方法是什么 如果
  • 在 JavaScript 中,如何在超时中包装承诺?

    使用 deferred promise 实现某些异步函数的超时是一种常见的模式 Create a Deferred and return its Promise function timeout funct args time var df
  • 如何在 geom_dotplot 中使用颜色?

    我有这个点图 ggplot mpg aes drv hwy geom dotplot binwidth 1 binaxis y stackdir center 呈现为 我想按制造商对点进行着色 如果我添加一个fill审美的 ggplot m
  • 在没有故事板的情况下创建和执行 Segue

    我有一个没有故事板的应用程序 所有 UI 创建都是用代码完成的 我得到了splitView我想让它在 iPhone 上使用 因为该应用程序最初是为 iPad 设计的 因此当您在主视图中选择列表中的一行时 它在 iPhone 上不会执行任何操
  • 为什么 Z3 中的运算符“/”和“div”给出不同的结果?

    我试图用两个整数来表示一个实数 并将它们用作实数的分子和分母 我写了以下程序 declare const a Int declare const b Int declare const f Real assert f a b assert
  • Visual Studio 2012 - 数据库项目 - 设置默认的发布配置文件

    只是想知道是否有人知道如何将保存的发布配置文件设置为默认配置文件 即当我选择发布时自动加载的配置文件 我喜欢新的配置文件方法 但在开发过程中我有点不愿意一遍又一遍地重新选择相同的配置文件 在 VS2012 及更高版本中 您可以通过右键单击
  • Tensorflow 模型导入到 Java

    我一直在尝试在 Java 中导入和使用我训练过的模型 Tensorflow Python 我能够在 Python 中保存模型 但当我尝试在 Java 中使用相同的模型进行预测时遇到问题 Here https gist github com