色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用TensorFlow 2識別驗證碼過程中踩過的坑

Tensorflowers ? 來源:TensorFlow ? 作者:TensorFlow ? 2020-10-22 16:47 ? 次閱讀

在學習了 CNN 之后,我一直想去做一個驗證碼識別。網上找了很多資料,雜七雜八的一大堆,但是好多是 tf1 寫的。我對 tf1 不太熟悉,于是自己開始了基于 TensorFlow 2 的摸索實踐。

摸索的過程異常艱難,一開始我直接用 captcha 生成了 10080 張驗證碼去識別,發現 loss 一直停留在 2.3 左右,accuracy 一直是 0.1 左右,訓練了 100 回合,也沒什么提升,電腦都快要跑廢了,咋辦呀?于是網上各種問大佬,找到機會就提問,其中一位大佬的回答讓我受到了啟發,他說:你可以先識別 1 位,然后 2 位,3 位,最后 4 位,一步一步來……。

本文主要描述我在驗證碼識別過程中的一些摸索,整理出來以供大家參考:

第一回:搭建網絡結構

首先我們需要搭建網絡結構,如下:

model=tf.keras.models.Sequential([ tf.keras.Input(shape=(H, W, C)), layers.Conv2D(32, 3, activation='relu'), layers.MaxPooling2D((2, 2)), layers.Conv2D(64, 3, activation='relu'), layers.MaxPooling2D((2, 2)), layers.Conv2D(64, 3, activation='relu'), layers.MaxPooling2D((2, 2)), layers.Conv2D(64, 3, activation='relu'), layers.MaxPooling2D((2, 2)), layers.Conv2D(64, 3, activation='relu'), layers.MaxPooling2D((2, 2)), layers.Flatten(), layers.Dense(1024, activation='relu'), layers.Dense(D * N_LABELS, activation='softmax'), layers.Reshape((D, N_LABELS)), ]) model.compile(optimizer='adam', loss='categorical_crossentropy', metrics= ['accuracy']) callbacks=[ tf.keras.callbacks.TensorBoard(log_dir='logs'), tf.keras.callbacks.ModelCheckpoint(filepath=check_point_path, save_weights_only=True, save_best_only=True) ] history = model.fit(train_gen, steps_per_epoch=len(train_idx)//batch_size, epochs=100, callbacks=callbacks, validation_data=valid_gen, validation_steps=len(valid_idx)//valid_batch_size)

summary:

我的訓練數據量:train count: 7408, valid count: 3176, test count: 4536

樣本圖:

訓練結果:

Train for 231 steps, validate for 99 steps Epoch 1/100 1/231 […] - ETA: 4:18 - loss: 2.2984 - accuracy: 0.1328 231/231 [==============================] - 143s 618ms/step - loss: 2.3032 - accuracy: 0.0971 - val_loss: 2.3029 - val_accuracy: 0.0987 Epoch 2/100 230/231 [============================>.] - ETA: 0s - loss: 2.3026 - accuracy: 0.1014 231/231 [==============================] - 121s 525ms/step - loss: 2.3026 - accuracy: 0.1013 - val_loss: 2.3031 - val_accuracy: 0.0986 Epoch 3/100 230/231 [============================>.] - ETA: 0s - loss: 2.3026 - accuracy: 0.1029 231/231 [==============================] - 138s 597ms/step - loss: 2.3026 - accuracy: 0.1026 - val_loss: 2.3032 - val_accuracy: 0.0986 Epoch 4/100 230/231 [============================>.] - ETA: 0s - loss: 2.3025 - accuracy: 0.1031 231/231 [==============================] - 124s 537ms/step - loss: 2.3025 - accuracy: 0.1031 - val_loss: 2.3032 - val_accuracy: 0.0987 Epoch 5/100 230/231 [============================>.] - ETA: 0s - loss: 2.3025 - accuracy: 0.1040 231/231 [==============================] - 123s 532ms/step - loss: 2.3025 - accuracy: 0.1039 - val_loss: 2.3032 - val_accuracy: 0.0989 Epoch 6/100 230/231 [============================>.] - ETA: 0s - loss: 2.3025 - accuracy: 0.1039 231/231 [==============================] - 118s 509ms/step - loss: 2.3025 - accuracy: 0.1038 - val_loss: 2.3033 - val_accuracy: 0.0988 … Epoch 20/100 230/231 [============================>.] - ETA: 0s - loss: 2.3025 - accuracy: 0.1038 231/231 [==============================] - 120s 521ms/step - loss: 2.3025 - accuracy: 0.1038 - val_loss: 2.3034 - val_accuracy: 0.0988 Epoch 21/100 190/231 [=======================>…] - ETA: 20s - loss: 2.3025 - accuracy: 0.1032

loss 一直沒有變化,accuracy 也很低,不知道出現了什么原因,困擾一兩個星期,都想要放棄了,太難了。但是我不死心,非要把它搞出來,4 位識別不出來,能不能先識別一位呢?好,那就開始搞,一位比較簡單,跟 Mnist 數據集很相似,在這我就不贅述了。

第二回:2 位彩色驗證碼訓練

接著來識別 2 位的驗證碼。train count: 441, valid count: 189, test count: 270

樣本圖:

下面是我用 2 位驗證碼進行訓練的結果:

30 張圖片進行測試,結果:

哎呦,有感覺了,有了起色了,但是出現了過擬合的現象,解決過擬合的方法主要有:

Get more training data

Reduce the capacity of the network

Add weight regularization

Add dropout

Data-augmentation

Batch normalization

第三回:增加彩色驗證碼數據集

于是我就增加了數據集。train count: 4410, valid count: 1890, test count: 2700

然后又出現了 loss 一直在 2.3,accuracy 在 0.09 左右,這是什么鬼呢?但是我還是不死心呀,繼續想辦法呀,既然彩色的有難度,我先識別黑白的樣本行不行呢,先試試吧。

第四回:2 位黑白驗證碼訓練

網絡結構依然采用上面的,input_shape(100,120,3)。

這是我用 2 位的黑白圖片的驗證碼進行了訓練,效果很好,收斂也很快。

訓練第 50 回合時:

Epoch 50/50 26/27 [============>…] - ETA: 0s - loss: 0.0150 - accuracy: 0.9940 27/27 [==============] - 8s 289ms/step - loss: 0.0212 - accuracy: 0.9936 - val_loss: 0.2348 - val_accuracy: 0.9446

隨機選取了 30 張圖片進行了測試,2 張識別錯了:

樣本圖:

看著這結果,我露出了潔白的大牙,信心大增呀,繼續搞,直接上 4 位驗證碼。

第五回:4 位黑白驗證碼訓練

依然采用上面的網絡結構,這次使用的是 4 位黑白圖片的驗證碼。train count: 2469, valid count: 1059, test count: 1512

訓練第 20 回合:

Epoch 20/20 76/77 [====>.] - ETA: 0s - loss: 0.0409 - accuracy: 0.9860 77/77 [======] - 33s 429ms/step - loss: 0.0408 - accuracy: 0.9861 - val_loss: 0.3283 - val_accuracy: 0.9221

隨機選取 30 張圖片進行測試,8 張錯誤:

4 位驗證碼的樣本圖:

從結果來看,有點過擬合,沒關系,繼續加大數據集。

第六回:增加黑白驗證碼數據集

依舊采用上面的網絡結構,這次我增加了數據集 4939 張,依舊使用的是 4 位黑白的驗證碼,訓練結果還是挺好的:train count: 4939, valid count: 2117, test count: 3024

第 20 回合:

Epoch 20/20 153/154 [==>.] - ETA: 0s - loss: 0.0327 - accuracy: 0.9898 154/154 [====] - 75s 488ms/step - loss: 0.0329 - accuracy: 0.9898 - val_loss: 0.1057 - val_accuracy: 0.9740

可以看出 訓練集的準確率 跟驗證集上很接近,隨機選取 30 張圖片進行測試,6 張錯誤圖如下:

好了,搞了這么多,由此我覺得是噪點影響了深度學習的識別,maxpool 的時候連帶著噪點也采樣了,我們需要將噪點處理掉,再喂入神經網絡

第七回:預處理

在上面的推理中,我感覺是噪點影響了神經網絡的識別,于是乎我在送入網絡之前進行了去噪,二值化操作,訓練如下:train count: 4939, valid count: 2117, test count: 3024

從圖中可以看出,模型收斂了,但有點過擬合,第 20 回合訓練結果如下:

Epoch 20/20 153/154 [==>.] - ETA: 0s - loss: 0.0407 - accuracy: 0.9861 154/154 [===] - 69s 450ms/step - loss: 0.0408 - accuracy: 0.9860 - val_loss: 0.3227 - val_accuracy: 0.9244

隨機選取了 30 張圖片進行了測試,8 張錯誤:

做到這里, 我對之前的推測有了猜疑:是噪點影響的嗎?我覺得不完全是。核心原因是我在嘗試的過程中對驗證碼進行了處理,從 RGB 的驗證碼變成了單通道的黑白驗證碼,使得圖片的信息減少了,神經網絡的計算量也大大減少了,網絡模型很快得到了收斂,loss 顯著減少,accuracy 在不斷提高。

整個過程是使用 CPU 進行訓練的,電腦配置是 Intel_Corei7-6700HQ_CPU@_2.60GHz,8G 內存。如果大家的電腦配置高,用 GPU 進行訓練,我覺得即使不做預處理,效果也能出來。


責任編輯:lq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cnn
    cnn
    +關注

    關注

    3

    文章

    353

    瀏覽量

    22281
  • tensorflow
    +關注

    關注

    13

    文章

    329

    瀏覽量

    60583
  • 驗證碼
    +關注

    關注

    2

    文章

    20

    瀏覽量

    4722

原文標題:經驗總結:使用 TensorFlow 2 識別驗證碼過程中踩過的坑

文章出處:【微信號:tensorflowers,微信公眾號:Tensorflowers】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    ADC高速采樣電路設計詳解之STM32

    一、過程 最近用STM32F334做數字電源,用到了高速ADC采集電壓電流。設計的參考電壓VREF為3.3V,輸入信號經運放跟隨后直接接入單片機的采樣通道。一開始測試一切正常,但隨著輸入信號
    的頭像 發表于 12-02 09:27 ?1128次閱讀
    ADC高速采樣電路設計詳解之STM32<b class='flag-5'>踩</b><b class='flag-5'>坑</b>

    TLV1548IDBRG4開發測試過程中發現2pcs失效了,怎么解決?

    最近有個項目生產過程中,有發現2PCS TLV1548IDBRG4 ADC A2通道異常(有做過交叉實驗,不良跟著芯片走),其它通道正常. 如下是項目相關原理圖,幫忙看下導致異常的可能原因: 其中
    發表于 11-19 06:00

    工業視覺在條碼/二維識別領域的應用

    。以下是工業視覺在條碼/二維識別領域的具體應用實例:質量追溯和召回過程簡化:條形碼常用于產品外包裝應用跟蹤,使召回的產品能夠盡快被識別,簡化召回的
    的頭像 發表于 11-18 16:28 ?297次閱讀
    工業視覺在條碼/二維<b class='flag-5'>碼</b><b class='flag-5'>識別</b>領域的應用

    在學習go語言的過程

    作為一個5年的phper,這兩年公司和個人都在順應技術趨勢,新項目慢慢從php轉向了go語言,從2021年到現在,筆者手上也先后開發了兩個go項目。在學習go語言的過程中也學習并總結了一些相關的東西,這篇文章就分享下自己的一
    的頭像 發表于 11-11 09:22 ?187次閱讀

    物聯網產品在生產測試過程中快速讀取貼片SIM卡號的方案

    一、物聯網行業存在的問題 蜂窩通信模組相關的開發項目過程中,經常使用到2mm*2mm, 5mm*6mm物聯網貼片卡,由于貼片卡無法向普通插拔卡那樣, 將卡號打印在卡板上
    的頭像 發表于 09-23 16:14 ?367次閱讀
    物聯網產品在生產測試<b class='flag-5'>過程中</b>快速讀取貼片SIM卡號的方案

    康謀分享 | 在基于場景的AD/ADAS驗證過程中識別挑戰性場景!

    基于場景的驗證是AD/ADAS系統開發過程中的重要步驟,然而面對海量駕駛記錄數據時,如何實現自動且高效地識別、分類和提取駕駛記錄的挑戰性場景?本文康謀為您介紹IVEX軟件
    的頭像 發表于 08-28 10:16 ?1129次閱讀
    康謀分享 | 在基于場景的AD/ADAS<b class='flag-5'>驗證</b><b class='flag-5'>過程中</b>,<b class='flag-5'>識別</b>挑戰性場景!

    請問AFE032使用過程中沖和振鈴問題怎么解決?

    在使用AFE032發送信號的過程中,發現在配置TX_PGA以及PA的寄存器時,均會產生一個沖。我們使用并沒有使用AFE032的內部DAC,但是斷開DAC以及AFE032的后級電路,開關TX_PGA以及PA均會產生過沖,請問是器件本身的問題還是寄存器配置的問題呢? AF
    發表于 08-08 06:08

    如何在Tensorflow實現反卷積

    TensorFlow實現反卷積(也稱為轉置卷積或分數步長卷積)是一個涉及多個概念和步驟的過程。反卷積在深度學習領域,特別是在圖像分割、圖像超分辨率、以及生成模型(如生成對抗網絡GANs)等任務
    的頭像 發表于 07-14 10:46 ?681次閱讀

    電容充放電過程中電壓的變化規律

    電容充放電過程中電壓的變化規律是一個非常重要的電子學課題,涉及到電容器的基本工作原理和特性。在這篇文章,我們將詳細探討電容充放電過程中電壓的變化規律,包括電容的基本特性、充電過程、放
    的頭像 發表于 07-11 09:43 ?6480次閱讀

    M16連接器12芯采購如何避免

      德索工程師說道在M16連接器12芯的采購過程中,為了避免,確保采購的順利進行以及產品的高質量,我們可以從以下幾個方面進行考慮和規劃:
    的頭像 發表于 06-07 17:46 ?824次閱讀
    M16連接器12芯采購如何避免<b class='flag-5'>踩</b><b class='flag-5'>坑</b>

    家庭路由器如何選?實用技巧讓你不再

    家庭路由器選購需考慮需求、預算、性能指標、硬件配置、軟件功能、認證與測試及售后服務。明確需求,選擇適合的型號和品牌,確保網絡穩定、高速。遵循這些技巧,避免,享受網絡便利。
    的頭像 發表于 04-29 11:38 ?779次閱讀

    痛苦“電池電壓偵測電路”,含淚總結設計要點

    和大家分享這個電路的設計要點,以及當時的設計失誤,幫助大家積累經驗,以后不要這種。 設計要點一:設定分壓電阻的大小 這種便攜式掌上閱讀器,當然是內置鋰電池的:
    的頭像 發表于 04-07 14:31 ?3873次閱讀
    痛苦<b class='flag-5'>踩</b><b class='flag-5'>坑</b>“電池電壓偵測電路”,含淚總結設計要點

    IGBT模塊封裝過程中的技術詳解

    IGBT 模塊封裝采用了膠體隔離技術,防止運行過程中發生爆炸;第二是電極結構采用了彈簧結構,可以緩解安裝過程中對基板上形成開裂,造成基板的裂紋;第三是對底板進行加工設計,使底板與散熱器緊密接觸,提高了模塊的熱循環能力。
    發表于 04-02 11:12 ?1205次閱讀
    IGBT模塊封裝<b class='flag-5'>過程中</b>的技術詳解

    工業制造行業的DPM識讀要如何選擇固定讀器?

    在工業制造行業,DPM是一種常見的標識方式,它是將信息直接標記在產品表面上,以便在生產過程中進行追蹤和識別。不言而喻,在如今的產品質量追溯管理應用上,需要對多種復雜條碼進行
    的頭像 發表于 03-06 13:52 ?690次閱讀
    工業制造行業<b class='flag-5'>中</b>的DPM<b class='flag-5'>碼</b>識讀要如何選擇固定讀<b class='flag-5'>碼</b>器?

    高低溫試驗箱選購指南—防秘籍

    選購高低溫試驗箱需要綜合考慮多方面因素。通過明確需求、選擇知名品牌、對比性能指標、權衡價格與性價比、保障售后服務以及參考用戶評價與案例等步驟,可以幫助您避免風險,選購到一款性價比高、適合自己需求的高低溫試驗箱。
    的頭像 發表于 02-24 09:22 ?626次閱讀
    高低溫試驗箱選購指南—防<b class='flag-5'>踩</b><b class='flag-5'>坑</b>秘籍
    主站蜘蛛池模板: 亚洲精品国产在线网站| 在线观看中文字幕国产| 97在线观看成人免费视频| 黄片在线观看| 亚洲欧美日本中文子不卡| 国产亚洲欧美在线观看三区| 午夜精品久久久久久影视riav| 国产成人a一在线观看| 射90黑b丝女| 日本福利片午夜免费观着| WRITEAS塞红酒瓶| 欧美一级黄色影院| SORA是什么意思| 色久久一个亚洲综合网| 国产精品欧美亚洲| 亚洲乱码国产乱码精品精98| 精品美女国产互换人妻| 人妻超级精品碰碰在线97视频| 成人在线高清不卡免费视频| 无码99久热只有精品视频在线 | 免费看片A级毛片免费看| 91嫩草视频在线观看| 清晨紧湿爱运动h高h| 国产高清视频免费在线观看| 亚洲 欧美 国产在线视频| 精品国产人成亚洲区| 4399日本电影完整版在线观看免费| 欧美成a人片免费看久久| 国产成人综合高清在线观看| 亚洲精品婷婷无码成人A片在线| 久久成人国产精品一区二区| 97色色极品av影院| 色女仆影院| 九九99国产香蕉视频| 99国产强伦姧在线看RAPE| 日韩中文亚洲欧美视频二| 国内外成人免费在线视频| 竹菊影视一区二区三区| 日本欧美高清一区二区视频| 国产午夜亚洲精品不卡电影| 1区2区3区4区产品不卡码网站|