解決keras+flask模型的重復調用出錯ValueError: Tensor is not an element of this graph
確認基調:這個問題不是大問題,看完本篇文章就能解決
1. 錯誤重現(xiàn)
ValueError: Tensor Tensor("dense_3/BiasAdd:0", shape=(?, 1), dtype=float32) is not an element of this graph.
2. 錯誤含義
表面含義:傳入的張量[tensor]并不是這個圖[graph]的元素。具體意義:就是說,當你進行模型預測的時候,傳入的數(shù)據(jù),和后臺的圖不匹配。
3. 解決方法
方法一
把keras的tensorflow的后端換成theano,具體操作不贅述
這個方法不推薦,因為并沒有實際解決問題,而是逃避問題,而且有可能會出現(xiàn)一些新的問題?!距牛揖统霈F(xiàn)了】
方法二
選擇每次調用模型的時候,重新加載一下模型,也就是說把加載模型寫在調用的函數(shù)里,這樣模型就是個局部變量,每次調用每次加載?!救绻€是報錯】
那記得在模型預測結果后,在其代碼追加一句:
ret = model.predict(x_test) keras.backend.clear_session()
意思就是清理下session,這樣每次調用都會加載一下模型,并且清除session
這個方法也不推薦,加載模型耗時耗力,而且清除了其他的session,有可能造成其他程序的崩潰
方法三
創(chuàng)建全局的model,創(chuàng)建全局的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_default(): prd = model.predict(x_test)
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
一文教你用python編寫Dijkstra算法進行機器人路徑規(guī)劃
迪杰斯特拉(Dijkstra)算法是典型最短路徑算法,用于計算一個節(jié)點到其他節(jié)點的最短路徑,這篇文章主要給大家介紹了關于利用python編寫Dijkstra算法進行機器人路徑規(guī)劃的相關資料,需要的朋友可以參考下2021-08-08
python?matplotlib庫繪圖實戰(zhàn)之繪制散點圖
Python有著強大的繪圖庫 matplotlib,該庫集成了大量的繪制函數(shù),可以滿足我們平時絕大多數(shù)的繪圖要求,這篇文章主要給大家介紹了關于python?matplotlib庫繪圖實戰(zhàn)之繪制散點圖的相關資料,需要的朋友可以參考下2022-07-07
DataFrame.to_excel多次寫入不同Sheet的實例
今天小編就為大家分享一篇DataFrame.to_excel多次寫入不同Sheet的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12

