开发者

解决keras+flask模型的重复调用出错ValueError: Tensor is not an element of this graph

目录
  • 1. 错误重现
  • 2. 错误含义
  • 3. 解决方法
    • 方法一
    • 方法二
    • 方法三
  • 总结

    确认基调:这个问题不是大问题,看完本篇文章就能解决

    1. 错误重现

    Value编程Error: Tensor Tensor("dense_3/BiasAdd:0&qRpXEeuot;, shape=(?, 1), dtype=float32) is not an element of this graph.

    2. 错误含义

    表面含义:传入的张量[tensor]并不是这个图[graph]的元素。具体意义:就是说,当你进行模型预测的时候,传入的数据,和后台的图不匹配。

    3. 解决方法

    方法一

    把keras的tensorflow的后端换成theano,具体操作不赘述

    这个方法不推荐,因为并没有实际解决问题,而是逃避问题,而且有可能会出现一些新的问题。【嗯,我就出现了】

    方法二

    选择每次调用模型的时候,重新加载一下模型,也就是说把加载模型写在调用的函数里,这样模型就是个局部变量,每次调用每次加载。【如果还是报错】

    那记得在模型预测结果后,在其代码追加一句:

    ret = model.predict(x_test)
    keras.backend.clear_session()
    

    意思就是清理下session,这样每次调用都编程客栈会加载一下模型,并且清除session

    这个方法也不推荐,加载模型耗时耗力,而且清除了其他的session,有可能造成其他程序的崩溃

    方法三

    创建全局的model,创建全局的graph,调用的时候直接引用过来

    像这样:

    if __name__ == '__main__':
    	graph = tf.get_default_graph()
    	model = keras.models.load_model('./data/model/model.model')
    	app.run(host='0.0.0.0', port=9090, debug=True)
    
    

    但是这不算结束,关键的地方来了,在调用模型的时候,要引用一下全局的图才行

    像这样:

    with graph.as_defa编程客栈ult():
    	prd = model.predict(x_test)
    

    总结

    以上为个人经验,希望能给大家一个参考,php也希望大家多多支持编程客栈(www.devze.com)。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜