使用Tensorflow服务提供Keras构建的Tensorflow模型时,连接层出错

时间:2018-04-19 11:44:08

标签: python tensorflow keras tensorflow-serving

在尝试为tensorflow服务中的特定模型调用预测时,我遇到了一个奇怪的错误:

node {
  name: "lys_conc/concat/axis"
  op: "Const"
  attr {
    key: "dtype"
    value {
      type: DT_INT32
    }
  }
  attr {
    key: "value"
    value {
      tensor {
        dtype: DT_INT32
        tensor_shape {
        }
        int_val: 1
      }
    }
  }
}
node {
  name: "lys_conc/concat"
  op: "ConcatV2"
  input: "lys_in"
  input: "lyb_in"
  input: "flatten_1/Reshape"
  input: "dropout_2/Identity"
  input: "lys_conc/concat/axis"
  attr {
    key: "N"
    value {
      i: 4
    }
  }
  attr {
    key: "T"
    value {
      type: DT_FLOAT
    }
  }
  attr {
    key: "Tidx"
    value {
      type: DT_INT32
    }
  }
}

背景:我设置了一个tensorflow服务容器,并成功移动了一些模型并检查了我可以得到客户端响应(我可以)。

我根据答案https://logback.qos.ch/manual,通过在keras中构建和训练它们,然后将它们导出并加载到tf-serving中来制作模型。

它失败的节点意味着连接4个源(2个输入,1个扁平嵌入和1个丢失输出)。退出已经被出口过程剥离了 - 这就是为什么我们在那里看到(先前)蝙蝠侠的原因。

其他要点:

  • 我有另一个模型,只有两个输入(一个嵌入+一个丢失)的类似concat,它在同一个服务实例上工作正常。
  • 在Keras我没有指定concat的轴,但是我可以在图表def中看到(在导出之前 - 见下文)它默认(正确)为1。
  • 我注意到错误中引用的轴变量不是属于此concat层的轴变量(lyt而不是lys)。但是被引用的那个也应该设置为1.我想知道这是否与错误有关,或者它是否只是在导出过程中发生了一些小优化。

相关图表def:

{{1}}

任何帮助或建议调试赞赏!

1 个答案:

答案 0 :(得分:0)

首先,将张量流服务中的潜在问题和数据输入格式与预测本身分开可能是一个好主意 很有可能存在输入维数问题,使得在嵌入嵌入时会引发错误。

尝试从导出的​​模型创建一个tensorflow预测器对象,并查看是否可以从预测中获取有效输出

from tensorflow.contrib import predictor
predictor_obj = predictor.from_saved_model(export_dir)
y = predictor_obj(inputs_to_model)

如果运行,则您的输入应具有正确的尺寸。确保您尝试批输入以及单输入)

如果失败,则可能需要重塑输入