使用 python API 进行的训练作为 java API 中 LabelImage 模块的输入?

2023-12-10

我在使用 java tensorflow API 时遇到问题。我使用 python tensorflow API 运行训练,生成文件 output_graph.pb 和 output_labels.txt。现在,出于某种原因,我想使用这些文件作为 java tensorflow API 中 LabelImage 模块的输入。我认为一切都会很好,因为该模块只需要一个 .pb 和一个 .txt。然而,当我运行该模块时,我收到此错误:

2017-04-26 10:12:56.711402: W tensorflow/core/framework/op_def_util.cc:332] Op BatchNormWithGlobalNormalization is deprecated. It will cease to work in GraphDef version 9. Use tf.nn.batch_normalization().
Exception in thread "main" java.lang.IllegalArgumentException: No Operation named [input] in the Graph
at org.tensorflow.Session$Runner.operationByName(Session.java:343)
at org.tensorflow.Session$Runner.feed(Session.java:137)
at org.tensorflow.Session$Runner.feed(Session.java:126)
at it.zero11.LabelImage.executeInceptionGraph(LabelImage.java:115)
at it.zero11.LabelImage.main(LabelImage.java:68)

如果您能帮我找出问题所在,我将不胜感激。此外,我想问你是否有一种方法可以从 java tensorflow API 运行训练,因为这会让事情变得更容易。

更准确地说:

事实上,我并没有使用自己编写的代码,至少在相关步骤中是这样。我所做的就是用这个模块进行训练,https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/image_retraining/retrain.py,向其提供包含图像的目录,这些图像根据其描述划分在子目录中。特别是,我认为这些是生成输出的行:

output_graph_def = graph_util.convert_variables_to_constants(
    sess, graph.as_graph_def(), [FLAGS.final_tensor_name])
with gfile.FastGFile(FLAGS.output_graph, 'wb') as f:
  f.write(output_graph_def.SerializeToString())
with gfile.FastGFile(FLAGS.output_labels, 'w') as f:
  f.write('\n'.join(image_lists.keys()) + '\n')

然后,我将输出(在同一个 graph.pb 和一些 labels.txt 上)作为该 java 模块的输入:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/java/src/main/java/org/tensorflow/examples/LabelImage.java,替换默认输入。我得到的错误是上面报告的错误。


LabelImage.java 中默认使用的模型与重新训练的模型不同,因此输入和输出节点的名称不对齐。请注意,TensorFlow 模型是图和参数feed() and fetch()是图中节点的名称。因此,您需要知道适合您的型号的名称。

看着retrain.py,它似乎有一个将 JPEG 文件的原始内容作为输入的节点(该节点DecodeJpeg/contents)并在节点中生成标签集final_result.

如果是这种情况,那么您将在 Java 中执行类似以下操作(并且您不需要构建图形来规范化图像的位,因为这似乎是重新训练模型的一部分,因此替换LabelImage.java:64类似的东西:

try (Tensor image = Tensor.create(imageBytes);
     Graph g = new Graph()) {
  g.importGraphDef(graphDef);
  try (Session s = new Session(g);
    // Note the change to the name of the node and the fact
    // that it is being provided the raw imageBytes as input
    Tensor result = s.runner().feed("DecodeJpeg/contents", image).fetch("final_result").run().get(0)) {
    final long[] rshape = result.shape();
    if (result.numDimensions() != 2 || rshape[0] != 1) {
      throw new RuntimeException(
          String.format(
              "Expected model to produce a [1 N] shaped tensor where N is the number of labels, instead it produced one with shape %s",
              Arrays.toString(rshape)));
    }
    int nlabels = (int) rshape[1];
    float[] probabilities = result.copyTo(new float[1][nlabels])[0];
    // At this point nlabels = number of classes in your retrained model
    DoSomethingWith(probabilities);
  }
}

希望有帮助。

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

使用 python API 进行的训练作为 java API 中 LabelImage 模块的输入? 的相关文章

随机推荐

  • 重新打开游戏时如何检查时间是否已过?

    当 tebs 变量在游戏中获得一些值时 协程就会运行 当它起作用时 它会设置timeScale归零并等待一段时间 然后游戏继续继续 问题是我想在游戏关闭和重新打开时检查实时 本地时间 并比较它们以检查时间是否过去 因此协程继续运行或结束 I
  • 派生类对象是否包含基类对象?

    请考虑下面的示例代码 include
  • 标准错误?它是什么?它的常见用途有哪些?

    对句柄 STDERR 的工作原理感到好奇吗 让我们简单地说一下批处理文件以保持简单和集中 我知道许多编程语言都接受 STDERR 所以我不知道是否可能用途有所不同 或者所有编程语言是否有一个共同的功能 如果有人可以提供一些您所见过的常见用法
  • 当转发到 JSP 时,如何检测 Java Servlet 中的 URL?

    我有一个看起来像这样的 servlet public class ExampleServlet extends HttpServlet public void doGet HttpServletRequest request HttpSer
  • 如何从内容处置中获取文件名

    我下载了一个文件作为ajax的响应 如何获取文件名和文件类型content disposition并显示它的缩略图 我得到了很多搜索结果 但找不到正确的方法 download btn click function var uiid this
  • 如何在 C# 中通过 TCP 连接发送整数数组

    我在 Windows 应用程序中在两台计算机之间建立了 TCP 连接 用于来回发送和接收数据 我发送的消息是一组转换为字符串并用 分隔的整数 因此 为了发送我要使用的数据 if dataSend Length gt 0 m writer W
  • 实现容器视图的问题

    我正在尝试遵循查看 iOS 控制器编程指南在我的应用程序中实现容器视图 目前 我只是想加载初始的第一个视图 但第一个控制器中包含的标签没有显示 最后 我希望能够通过使用分段控件来控制容器中显示哪个视图 任何帮助将不胜感激 我的故事板 视图控
  • Windows Mobile 5 SDK 按钮控制

    我是一名相当新手的程序员 正在开发我的第一个 Windows Mobile 应用程序 我发现我的程序没有可用的按钮控件 我以前从未创建过自定义控件 并且我知道这是为我的应用程序获取按钮的唯一方法 这是我的客户的要求 我想知道是否有人可以给我
  • 如何指定跨域策略文件以允许 Flash 从 RTMP (Wowza) 视频流中抓取位图?

    我正在尝试获取在客户端上播放的 Wowza 视频流的位图 快照 如下所示 var bitmapData BitmapData new BitmapData view videoPlayerComponent width view video
  • 无法将多行字符串设置为环境变量

    如何在 VSTS powershell 任务上将多行字符串设置为环境变量 以下代码仅保存字符串的第一行 string xmlstring Get Content Encoding UTF8 Path System DefaultWorkin
  • 非根位置部署的绝对路径

    我通常使用以下方式引用我网站上的任何资产绝对路径这样我就不必担心资产相对于当前文件的位置 img src images flag png img src images flag png 但是 这次我需要将站点托管在非根位置 例如http m
  • 适配器无法与数据映射器一起使用

    我有以下代码 require sinatra require datamapper DataMapper setup default postgres localhost mydb 但是 当我尝试运行它时 我得到 LoadError 没有要
  • WebKit“拒绝设置不安全标头‘内容长度’”

    我正在尝试实现简单的 xhr 抽象 并且在尝试设置 POST 标头时收到此警告 我认为这可能与在单独的 js 文件中设置标头有关 因为当我将它们设置在
  • 设置 BigDecimal 的特定精度

    我有一个XSD这要求我使用 BigDecimal 来表示纬度 经度 我目前将纬度 经度作为双精度数 并将它们转换为 BigDecimal 但我只需要使用大约 12 位精度 我一直不知道如何设置 谁能帮我这个 您可以使用设置比例 e g do
  • 在 Python 中解析用户提供的数学公式的安全方法

    Python 有数学表达式解析器 求值器吗 我不是第一个问这个问题的人 但答案通常指向eval 例如 可以这样做 gt gt gt safe list math acos asin atan atan2 ceil cos cosh degr
  • 让内部指令在外部指令之前运行

    我有以下 html div ul class tabs li tab li ul div class tab content div tabContent div div div 我遇到的问题是 tabs 指令在 ng repeat 指令之
  • 非自相交多边形创建算法的有效性

    作为扩展和部分答案我的话题我写了一个简单的算法 给定一组点 具有 xy 坐标 可以形成一个非自相交的多边形 主张 给定具有不同坐标的任意点集 始终可以构造规则或不规则 非自相交的多边形 算法 假设有一个包含所有顶点的集合V 1 按x坐标对V
  • 如何实现Delphi的ToolsAPI的IOTAProjectCompileNotifier?

    我正在使用 Delphi XE IDE 我创建了一个通知程序来实现 IOTACompileNotifier 在IDE中安装专家后 当我编译我的项目时 代码运行良好 通知程序正在为 ProjectCompileStarted 工作 第二次编译
  • Angularjs 动态指令

    注意 我对 angularjs 很陌生 问题的最佳解决方案 实践是什么 我有一个数组或键入的值 对于每种类型应该有不同的输入 模板和输入验证 例如 并简化 var vars type int value 42 min 0 max 42 ty
  • 使用 python API 进行的训练作为 java API 中 LabelImage 模块的输入?

    我在使用 java tensorflow API 时遇到问题 我使用 python tensorflow API 运行训练 生成文件 output graph pb 和 output labels txt 现在 出于某种原因 我想使用这些文