在Flask使用TensorFlow的幾個常見錯誤及解決
在Flask使用TensorFlow的幾個常見錯誤
常見錯誤一
1. ValueError: Tensor Tensor(“dense_1/Sigmoid:0”, shape=(?, 1), dtype=float32) is not an element of this graph.
在Flask中使用tensorflow的model,一在界面中調(diào)用 model.predict() 就報下面這個錯誤,不過在單獨的 .py 文件中使用卻不報錯。
ValueError: Tensor Tensor("dense_1/Sigmoid:0", shape=(?, 1), dtype=float32) is not an element of this graph.
這個bug真的很是糾心,網(wǎng)上一般說是添加如下代碼
import tensorflow as tf graph = tf.get_default_graph() model = models.load_model(…………) # 使用處添加: global graph global model with graph.as_default(): model.predict() # 執(zhí)行預(yù)測函數(shù)
但是我當時測試時又報了另一個bug,但是這個bug也不好解決,試了很多方法也沒解決,當然最終還是可以解決的,具體解決方式參考第三點。
tensorflow.python.framework.errors_impl.FailedPreconditionError: Error while reading resource variable dense_1/bias from Container: localhost. This could mean that the variable was uninitialized. Not found: Resource localhost/dense_1/bias/class tensorflow::Var does not exist.
[[{{node dense_1/BiasAdd/ReadVariableOp}}]]
后來經(jīng)過N遍測試后找到了以下兩種解決方式,僅供參考:
解決方法一:
在調(diào)用前加載model和graph,但是這樣會導(dǎo)致程序每次調(diào)用都需要重新加載model,然后運行速度就會很慢,不過這種修改方式是最簡單的。
graph = tf.get_default_graph() model = models.load_model('./static/my_model2.h5') with graph.as_default(): result = model.predict(tokens_pad)
解決方法二:
在創(chuàng)建model后,先使用一遍 model.predict(),參數(shù)的大小和真實大小一致,這個是真正解決之道,同時不影響使用速率。
# 使用前: model = models.load_model('./static/my_model2.h5') # a 矩陣大小和 tokens_pad 一致 a = np.ones((1, 220)) model.predict(a) # 使用時: global model result = model.predict(tokens_pad)
但是在使用后又遇到了 The Session graph is empty…… 的錯誤即第二點,不過估摸著這個是個例,應(yīng)該是程序問題。
常見錯誤二
2. RuntimeError: The Session graph is empty. Add operations to the graph before calling run().
在相關(guān)代碼使用前添加graph即可。
graph = tf.get_default_graph() with graph.as_default(): # 相關(guān)代碼 # 本次測試中是需要把調(diào)用包含model.predict()方法的方法的代碼放到這里
常見錯誤三
3. tensorflow.python.framework.errors_impl.FailedPreconditionError: Error while reading resource variable dense_1/bias from Container: localhost. This could mean that the variable was uninitialized. Not found: Resource localhost/dense_1/bias/class tensorflow::Var does not exist.[[{{node dense_1/BiasAdd/ReadVariableOp}}]]
這個錯誤呢,也是TensorFlow和Flask結(jié)合使用時的常見錯誤
解決方式
如下:
from tensorflow.python.keras.backend import set_session # 程序開始時聲明 sess = tf.Session() graph = tf.get_default_graph() # 在model加載前添加set_session set_session(sess) model = models.load_model(…………) # 每次使用有關(guān)TensorFlow的請求時 # in each request (i.e. in each thread): global sess global graph with graph.as_default(): set_session(sess) model.predict(...)
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python2與Python3關(guān)于字符串編碼處理的差別總結(jié)
這篇文章主要給大家介紹了Python2與Python3關(guān)于字符串編碼處理差別的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09Windows上使用virtualenv搭建Python+Flask開發(fā)環(huán)境
在自己本機的開發(fā)環(huán)境下,我們完全可以使用virtualenv來hold住多個Python環(huán)境,這樣就可以留出一個專門服役于Flask框架,哈哈,這里我們就來看看如何在Windows系統(tǒng)上使用virtualenv搭建Python+Flask開發(fā)環(huán)境2016-06-06調(diào)用其他python腳本文件里面的類和方法過程解析
這篇文章主要介紹了調(diào)用其他python腳本文件里面的類和方法過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-11-11Python實現(xiàn)查找數(shù)組中任意第k大的數(shù)字算法示例
這篇文章主要介紹了Python實現(xiàn)查找數(shù)組中任意第k大的數(shù)字算法,涉及Python針對數(shù)組的排序、查找等相關(guān)操作技巧,需要的朋友可以參考下2019-01-01