Tensorflow在java

时间:2018-06-12 21:53:42

标签: java tensorflow

我在java上遇到一个关于tf的小问题。我使用python(1.8.0版本)重新训练我的模型以获得新类别,并且我正在尝试使用Java识别图像(Intellij,Maven项目,Tensorflow版本1.1.0),我收到以下错误。

java.lang.IllegalArgumentException: NodeDef mentions attr 'dilations' not in Op<name=Conv2D; signature=input:T, filter:T -> output:T; attr=T:type,allowed=[DT_HALF, DT_FLOAT, DT_DOUBLE]; attr=strides:list(int); attr=use_cudnn_on_gpu:bool,default=true; attr=padding:string,allowed=["SAME", "VALID"]; attr=data_format:string,default="NHWC",allowed=["NHWC", "NCHW"]>; NodeDef: module_apply_default/InceptionV3/InceptionV3/Conv2d_1a_3x3/Conv2D = Conv2D[T=DT_FLOAT, data_format="NHWC", dilations=[1, 1, 1, 1], padding="VALID", strides=[1, 2, 2, 1], use_cudnn_on_gpu=true](module_apply_default/hub_input/Sub, module_apply_default/InceptionV3/InceptionV3/Conv2d_1a_3x3/Conv2D/ReadVariableOp). (Check whether your GraphDef-interpreting binary is up to date with your GraphDef-generating binary.).

我将Maven中的tf版本更改为1.8.0,所以与python版本相同然后我得到了这个

  java.lang.IllegalArgumentException: No Operation named [DecodeJpeg/contents] in the Graph

代码行:Tensor result = s.runner().feed("DecodeJpeg/contents", image).fetch("softmax").run().get(0)) { h

当我使用2015年12月的预训练初始模型图时,并非我的一切都顺利运行而没有错误。有谁知道这里发生了什么,我该如何解决?我会非常感谢任何答案:D谢谢!

1 个答案:

答案 0 :(得分:0)

从错误消息中,这是我收集的内容:

  • 使用1.8.0创建模型但1.1.0加载模型失败并显示Check whether your GraphDef-interpreting binary is up to date with your GraphDef-generating binary.错误,因为1.8.0二进制文件保存的图形使用的功能不在1.1.0中。因此,您应该让您的Java程序使用相同或更高版本的TensorFlow作为生成图形的二进制文件。

  • 第二条错误消息表明模型中输入张量的名称与预训练模型中的输入张量名称不同。您希望用适当的名称替换Java程序中的字符串DecodeJpeg/contents。很难说它会是什么,因为它取决于你的程序的细节。但是,如果你可以找出你在Python中为feed_dict提供Session.run参数的张量的名称,那么那就是你在Java中提供的内容

希望有所帮助。