当前位置: 首页 > 知识库问答 >
问题:

不能在Java API中运行Tensorflow预测

颜光临
2023-03-14

我试图对一个模型执行预测,该模型是我使用“Finetuning AlexNet with TensorFlow”https://kratzert.github.io/2017/02/24/Finetuning-AlexNet-with-TensorFlow.html训练的

我在Python中使用tf.saved_model.builder.savedModelBuilder保存了模型,并在Java中使用savedModelBundle.load加载了模型。守则的主要部分是:

    SavedModelBundle smb = SavedModelBundle.load(path, "serve");
    Session s = smb.session();
    byte[] imageBytes = readAllBytesOrExit(Paths.get(path));
    Tensor image = constructAndExecuteGraphToNormalizeImage(imageBytes);
    Tensor result = s.runner().feed("input_tensor", image).fetch("fc8/fc8").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 [] a =  result.copyTo(new float[1][nlabels])[0];`

我得到了一个例外:

我看到上面的代码对一些人有效,我不知道这里缺少什么。注意,net熟悉节点“input_tensor”和“fc8/fc8”,因为它没有说它不知道它们。

共有1个答案

颛孙兴旺
2023-03-14

从错误消息来看,您所使用的模型似乎需要输入另一个值(其在图中的节点名为placeholder_1,所需类型为浮动标量张量)。

似乎您已经定制了您的模型(而不是逐字跟踪链接到的文章)。也就是说,这篇文章显示了多个需要输入的占位符,一个用于图像,另一个用于控制退出。在文章中定义为:

keep_prob = tf.placeholder(tf.float32)

并且需要输入这个占位符的值。如果要进行推断,则需要将keep_prob设置为1.0。类似于:

Tensor keep_prob = Tensor.create(1.0f);
Tensor result = s.runner()
  .feed("input_tensor", image)
  .feed("Placeholder_1", keep_prob)
  .fetch("fc8/fc8")
  .run()
  .get(0);
 类似资料:
  • 我正在尝试执行这个代码是pycharm 但我总是犯这个错误 但我可以使用terminal运行相同的代码

  • 如何修复这些错误?

  • 我正在尝试做一些深度学习的工作。为此,我首先在我的Python环境中安装了所有用于深度学习的包。 这就是我所做的。 在Anaconda中,我创建了一个名为的环境,如下所示 然后在其中安装了data science Python包,如Pandas、NumPy等。我还在那里安装了TensorFlow和Keras。下面是该环境中的包列表 您可以看到还安装了。 现在,当我在这个环境中打开Python解释器

  • 我对Python非常陌生,实际上这是我写的第一篇文章,如果有人能给我解释一下,我将不胜感激 我遵循一个教程,使用构建了一个简单的人工神经网络。我使用了社区版来实现这一点 现在我想用这个人工神经网络来预测结果。我的问题是,我是否可以执行下面这行代码,而不必从代码的开头运行整个脚本并将其放在代码的末尾? 据我所知,每次我运行脚本时,都会创建新的神经网络,然后对其进行训练。我想跳过整个过程,只训练一次网

  • 这是我的Java代码: 当我运行它时,会出现以下错误: 我正在使用IntelliJ,安装了chrome驱动程序,但没有解决它,所以任何人都知道这个问题的解决方案??

  • 在eclipse IDE中,我使用Maven项目创建了一个基本的cucumber框架。 我已经添加了pom.xml.for dependencies下面添加的TestNG插件中所需的所有依赖项。 但是“TestNG套件”选项没有出现在首选项中,所以通过帮助->Install New Software安装TestNG。 testng.xml文件 但它的投掷低于错误