当前位置:  开发笔记 > 编程语言 > 正文

如何通过TensorFlowInferenceInterface.java提供布尔占位符?

如何解决《如何通过TensorFlowInferenceInterface.java提供布尔占位符?》经验,为你挑选了1个好方法。

我正尝试通过Java Tensorflow API启动Keras Tensorflow图形培训. 除了标准输入图像占位符之外,此图形还包含"keras_learning_phase"占位符,需要使用布尔值.

问题是,没有在任何方法TensorFlowInferenceInterface为布尔值-你只能给它浮动,,INT字节的值.

显然,当我尝试通过此代码将int传递给此张量时:

inferenceInterface.fillNodeInt("keras_learning_phase",  
                               new int[]{1}, new int[]{0});

我明白了

tensorflow_inference_jni.cc:207推理期间出错:内部:int32类型的输出0与声明的输出类型bool不匹配节点_recv_keras_learning_phase_0 = _Recvclient_terminated = true,recv_device ="/ job:localhost/replica:0/task:0/cpu:0 ",send_device ="/ job:localhost/replica:0/task:0/cpu:0",send_device_incarnation = 4742451733276497694,tensor_name ="keras_learning_phase",tensor_type = DT_BOOL,_device ="/ job:localhost/replica:0/task :0/CPU:0"

有没有办法规避它?
也许有可能以某种方式将图中的占位符节点显式转换为常量
或者也许最初可以避免在图表中创建此占位符



1> ash..:

TensorFlowInferenceInterface班本质上是在整个一个便利的包装TensorFlow的Java API,它不支持布尔值.

你也许可以添加一个方法TensorFlowInferenceInterface来做你想做的事情.与之类似fillNodeInt,您可以添加以下内容(请注意,TensorFlow中的布尔值表示为一个字节):

public void fillNodeBool(String inputName, int[] dims, bool[] src) {
  byte[] b = new byte[src.length];
  for (int i = 0; i < src.length; ++i) {
    b[i] = src[i] ? 1 : 0;
  }
  addFeed(inputName, Tensor.create(DatType.BOOL, mkDims(dims), ByteBuffer.wrap(b)));
}

希望有所帮助.如果它有效,我建议您回馈TensorFlow代码库.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有