• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于flask+TensorFlow的手寫數(shù)字識別模型Web應(yīng)用開發(fā)

      2019-01-06 06:38張磊李斌李臻
      新一代 2019年22期

      張磊 李斌 李臻

      摘 要:手寫數(shù)字識別是研究圖像識別、深度學(xué)習(xí)技術(shù)的典型案例,本文中以手寫數(shù)字識別Web應(yīng)用程序開發(fā)為例,介紹了基于flask框架的TensorFlow+Python Web開發(fā)技術(shù)和相關(guān)的編程方法。

      關(guān)鍵詞:flask框架;Python Web開發(fā);手寫數(shù)字識別

      一、引言

      圖像識別是深度學(xué)習(xí)技術(shù)最廣泛的應(yīng)用之一,手寫數(shù)字識別是學(xué)習(xí)和研究深度學(xué)習(xí)、圖像識別的典型案例,本文中使用TensorFlow(以下簡稱TF)框架訓(xùn)練手寫數(shù)字識別模型、Python語言作為Web開發(fā)工具,基于flask框架實(shí)現(xiàn)了一款手寫數(shù)字識別Web應(yīng)用程序,為TF模型在Web中部署和開發(fā)應(yīng)用提供參考。

      二、模型訓(xùn)練和保存

      手寫數(shù)字識別采用LeNet-5 CNN模型。LeNet-5由INPUT層、2個(gè)卷積層、2個(gè)池化層、3個(gè)全連接層構(gòu)成。INPUT層的輸入尺寸為32×32像素手寫數(shù)字圖像,手寫數(shù)字包含數(shù)字“0~9”,OUTPUT層輸出One-Hot格式的10分類結(jié)果。

      訓(xùn)練模型的MNIST數(shù)據(jù)集中圖片尺寸為28×28像素,像素點(diǎn)用8位灰度值表示。由于LeNet-5模型INPUT層的輸入尺寸為32×32像素,MNIST數(shù)據(jù)集中原始圖像尺寸并不符合模型輸入要求,使用numpy庫(簡稱為np)中的數(shù)組填充函數(shù)np.pad()將原始圖像四周填充兩圈數(shù)字“0”,得到尺寸32×32像素的新圖像。MNIST數(shù)據(jù)集類別標(biāo)簽?zāi)J(rèn)是One-Hot格式。

      TF是基于計(jì)算圖的框架,使用TF框架訓(xùn)練LeNet-5模型,根據(jù)模型結(jié)構(gòu)定義的神經(jīng)網(wǎng)絡(luò)前向傳播過程構(gòu)造出計(jì)算圖,計(jì)算圖中描述張量在節(jié)點(diǎn)之間從前到后的流動(dòng)過程。訓(xùn)練模型在會話進(jìn)行,調(diào)用tf.Session()可生成會話,并創(chuàng)建默認(rèn)計(jì)算圖。在會話中不斷喂入數(shù)據(jù),反復(fù)執(zhí)行反向傳播優(yōu)化算法,確定最優(yōu)的模型參數(shù)。

      模型訓(xùn)練完,將模型保存成TF檢查點(diǎn)。檢查點(diǎn)可在Web服務(wù)器端由程序調(diào)用,在TF中,tf.train.Saver對象的save()和restore()方法分別用于保存和恢復(fù)模型參數(shù)。

      三、Web應(yīng)用程序中使用TF模型

      將手寫數(shù)字識別的TF模型部署到Web中,前端負(fù)責(zé)獲取用戶在頁面上手寫數(shù)字圖像并預(yù)處理,再向服務(wù)器發(fā)出AJAX請求,請求內(nèi)容為待識別的圖像。服務(wù)器端程序生成TF會話并加載訓(xùn)練好的模型,調(diào)用相應(yīng)的視圖函數(shù)將請求數(shù)據(jù)送入TF會話中計(jì)算,最后將識別結(jié)果異步回傳到前端。

      (一)前端頁面功能實(shí)現(xiàn)

      頁面文件中主要包括繪制畫布、預(yù)覽畫布、提交按鈕、清除按鈕和用于顯示分類結(jié)果的表格等界面元素。

      繪制畫布是一個(gè)用canvas標(biāo)簽實(shí)現(xiàn)的320×320像素的畫布。使用canvas對象的getContext()方法可得到一個(gè)繪圖環(huán)境,該環(huán)境提供了在畫布上繪圖的方法和屬性。繪制畫布綁定鼠標(biāo)事件的監(jiān)聽器,當(dāng)用戶按下并拖動(dòng)鼠標(biāo)時(shí),可將鼠標(biāo)移動(dòng)的路徑(經(jīng)過的像素點(diǎn))呈現(xiàn)到繪制畫布上,這樣用戶可在繪制畫布上使用鼠標(biāo)書寫數(shù)字。手寫數(shù)字圖像存儲為uint8類型的像素矩陣,每一個(gè)位置的像素點(diǎn)包括R、G、B、A四個(gè)通道值。

      模型INPUT層輸入圖像為尺寸32×32像素的灰度圖,尺寸為320×320像素原始手寫數(shù)字圖像應(yīng)在前端完成尺寸調(diào)整和灰度化等預(yù)處理,再發(fā)送給服務(wù)器,以便減少向服務(wù)器傳輸?shù)膱D像數(shù)據(jù)量。

      預(yù)處理后的手寫數(shù)字圖像存儲在JavaScript數(shù)組中,并在預(yù)覽畫布(canvas標(biāo)簽對象)中顯示。使用JSON.stringify()方法將JavaScript數(shù)組中圖像數(shù)據(jù)轉(zhuǎn)換為JSON字符串形式的數(shù)據(jù),再將這些數(shù)據(jù)以POST方式向服務(wù)器特定URL發(fā)送AJAX請求。

      (二)服務(wù)器端程序功能實(shí)現(xiàn)

      服務(wù)器程序主要功能:一是生成TF會話并載入模型(模型結(jié)構(gòu)和模型參數(shù));二是渲染前端頁面、響應(yīng)前端請求、處理數(shù)據(jù)以及返回識別的結(jié)果。

      服務(wù)程序生成會話并將模型結(jié)構(gòu)導(dǎo)入至?xí)挼哪J(rèn)圖,調(diào)用tf.train.import_meta_graph()函數(shù)導(dǎo)入模型結(jié)構(gòu),再還原模型參數(shù)。利用tf.get_default_graph().get_tensor_by_name()函數(shù)可通過節(jié)點(diǎn)名稱獲取到模型INPUT層的輸入變量x與keep_prob、OUTPUT層的輸出變量y。

      flask中路由解析模塊Werkzeug可將URL請求映射至相應(yīng)的處理函數(shù)中完成業(yè)務(wù)邏輯和數(shù)據(jù)的處理。手寫數(shù)字識別前端頁面請求的數(shù)據(jù)傳入服務(wù)器端flask實(shí)例程序,由Werkzeug對URL進(jìn)行路由解析,找到分類識別視圖函數(shù)。視圖函數(shù)中使用flask.request.json獲取手寫數(shù)字圖像數(shù)據(jù),對數(shù)據(jù)做歸一化處理后喂入模型,可返回手寫數(shù)字的分類識別結(jié)果。

      四、結(jié)語

      本文以手寫數(shù)字識別Web應(yīng)用程序?yàn)槔榻B了TF機(jī)器學(xué)習(xí)模型應(yīng)用到基于flask框架的Python Web開發(fā)中的關(guān)鍵技術(shù)和編程方法,在TF+Web的應(yīng)用場景下,Web后端和TF程序統(tǒng)一使用Python語言開發(fā),編程簡單高效。

      參考文獻(xiàn):

      [1]李超,徐云龍,華中偉,等.一種基于Python Flask的Web服務(wù)器端設(shè)計(jì)[J].信息與電腦(理論版),2019,8:87-88.

      [2]馬旭,王淑.基于Flask框架的展示型網(wǎng)站的設(shè)計(jì)與實(shí)現(xiàn)[J].數(shù)字技術(shù)與應(yīng)用,2018(11):137-138.

      马山县| 阿图什市| 轮台县| 巴楚县| 新疆| 喀喇沁旗| 高州市| 阜南县| 洛扎县| 利津县| 新邵县| 寻乌县| 昭苏县| 剑河县| 佳木斯市| 潞城市| 南皮县| 满城县| 长子县| 蒲城县| 西峡县| 罗平县| 绩溪县| 屏边| 惠州市| 航空| 普洱| 咸宁市| 凉城县| 北安市| 临武县| 汝州市| 霍邱县| 蓝山县| 日喀则市| 沅陵县| 名山县| 广西| 武川县| 桃园县| 沐川县|