Keras 的 Web 填坑記
0x00 前言
特別聲明:當你在看這篇文章時,你需要對 keras 的基本用法已經了解和使用,並且具有簡單的Python Web開發基礎,如果不是,建議你對本篇文章點個贊之後關閉,因為接下來的內容可能會令你感到不適。由於接下來的文章需要我將用簡單的代碼演示,所以我將使用Keras和Django進行演示(此處的Keras使用的是Tensorflow作為後端)。
之前開發過一個Web網站,需要對上傳的圖片進行深度學習預測,使用的是Keras作為項目的深度學習後端,前端使用的是Django。本以為分別開發完成Web程式和Keras的學習預測模塊之後拼到一起就可以了,鬼知道tensorflow會報錯啊?!還報的那麼噁心的錯誤!!!!
部分代碼
報的錯誤截圖
Tensor Tensor("dense_2/Softmax:0", shape=(?, 10), dtype=float32) is not an element of this graph.
這是什麼鬼啊!第一次看到這個的錯誤時一臉懵逼
好吧,深究原因,是因為Tensorflow的運行機制正好和Web有衝突,Tensorflow在後端做預測時是將「圖」導入到內存中,之後對圖進行計算返回結果,正常情況下這樣執行完成之後,程序就Kill掉了,但是由於這裡有Web服務,所以那個「圖」的計算並沒有Kill掉,在第二次執行時,「圖」再次被導入計算,由於同時出現了兩張一樣的「圖」,程式就分不清楚哪個是哪個的元素了,於是乎就產生了這樣的問題。(PS: 以上一本正經的胡說八道)
既然出現了這樣的問題,我就要想辦法解決啦,下面,我要開始表演啦!!!前方小高能
0x01 第一種解決方案
先來一個小高能,這也是我遇到這個問題之後想到的第一個解決方案,把預測程式打包成一個獨立的應用程式,之後每次查詢的時候使用系統命令直接調用這個程式,獲取返回結果即可。這個想法比較簡單,可執行性也是比較高的,但是缺點也很明顯,就是每次預測時候都要重新載入一次模型,時間就是金錢啊!
安啦,下面??才是真高能。高能預警??
0x02 比較正統的解決方案
鑒於問題的根本原因,那我們就對症下藥好啦,由於是「圖」不能同時共存兩張,那我們每次都用同一張圖就可以了嘛。
import tensorflow as tfgraph = tf.get_default_graph()global graphwith graph.as_default(): # 執行預測函數
嗯,沒錯,就是這四行代碼輕鬆解決這個問題,超簡單啊有木有!!!
部分代碼
上傳圖片操作
頁面比較簡約,嗯,就是這樣。運行結果
連續上傳兩次,我們可以看見預測時間超級快的說。
0x03 結束語
如果本篇文章幫助到了你,實屬本人榮幸。如果沒看懂,那就算啦。~ . ~
點贊和打賞是一種美德。
代碼詳見倉庫 https://github.com/ctudoudou/Keras-Web-demo
推薦閱讀:
TAG:TensorFlow | Keras | Web開發 |