1. 程式人生 > >基於python語言的tensorflow的‘端到端’的字元型驗證碼識別原始碼整理(github原始碼分享)

基於python語言的tensorflow的‘端到端’的字元型驗證碼識別原始碼整理(github原始碼分享)

4   本文工作

  • 解釋了原作者程式碼註釋中提到的關於sigmoid選型的困惑問題並應用到程式碼中
  • 將原作者的程式碼進行模組工程化,成為整體專案,方便研究的同學直接進行模式套用

原作者程式碼中:

def train_crack_captcha_cnn():
    output = crack_captcha_cnn()
    # loss
    #loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(output, Y))
    loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=output, labels=Y))
        
# 最後一層用來分類的softmax和sigmoid有什麼不同? # optimizer 為了加快訓練 learning_rate應該開始大,然後慢慢衰 optimizer = tf.train.AdamOptimizer(learning_rate=0.001).minimize(loss) ……

作者在程式碼的註釋中出提出了這樣的疑問:

對 softmax 和 sigmoid 的使用方式有疑問。

然後在文章下面讀者評論區也都提到了此問題,在此進行整體解釋一下。

原文中CNN的輸出的維度是 MAX_CAPTCHA*CHAR_SET_LEN ,其實這些維度並不都是完全獨立分佈的, 但是使用sigmoid loss也是仍然可以的,相當於先用sigmoid進行了一次歸一化,然後再將各個維度的值向目標值進行 迴歸

 , 最後loss越小,兩個向量的對應的值也越接近。 其實sigmoid是可以看成是一個多分類的問題,在這個例子上也能起到比較好的收斂效果

當然,關於分類的問題,看所有的機器學習框架裡面,都是建議使用softmax進行最後的歸一化操作,這其實相當於是一種 馬太效應 : 讓可能性大的分類的值變得更大,讓可能性小的分量值變得更小。但是這有個前提,就是參與到softmax運算的一組資料,必須是 相關聯 的, 所以如果要使用 softmax_cross_entropy_with_logits ,只需要將網路進行簡單修改即可。把輸出的維度做成二維[MAX_CAPTCHA, CHAR_SET_LEN], 然後使用softmax loss。

output = crack_captcha_cnn()#36×4
predict = tf.reshape(output, [-1, MAX_CAPTCHA, CHAR_SET_LEN])  # 36行,4列
label = tf.reshape(Y, [-1, MAX_CAPTCHA, CHAR_SET_LEN])

最後使用GPU訓練的實驗結果對比:

  • sigmoid方式。訓練6000個step就能達到95%的準確率。
  • softmax方式。訓練8千個step,達到90%的準確率;訓練8萬個step,達到94.7%(跑了大半天)

使用tensorboard對accuracy進行監控:

sigmoid-6千個step:


softmax-8千個step:


softmax-8萬個step:


整體來說,在這個例子裡面,好像 sigmoid的收斂速度快些,當然這個可能是本專案裡面的外界因素有利於sigmoid吧,至於具體原因,等後續再進行研究和解釋吧,當然有可能根本解釋不了,因為對於CNN,目前主流的意見都是:,反正效果就是好,但是不知道為啥, 科幻得近於玄幻 的一種技術。

github原始碼地址:

相關推薦

基於python語言tensorflow的‘’的字元驗證識別原始碼整理(github原始碼分享)

4   本文工作 解釋了原作者程式碼註釋中提到的關於sigmoid選型的困惑問題並應用到程式碼中 將原作者的程式碼進行模組工程化,成為整體專案,方便研究的同學直接進行模式套用 原作者程式碼中: def train_crack_captcha_cnn(): outp

Python網路爬蟲之極驗滑動驗證識別

驗證碼分析 使用程式碼完成極驗驗證碼的識別,需要了解一下幾點: 通過該驗證碼的識別動作為:點選並拖拽滑塊 - 滑動滑塊至缺口處 - 釋放滑鼠 該驗證碼增加了機器學習來識別拖動的軌跡,即:

selenium自動化實戰-基於python語言(二: 編寫腳本)

獲取 pat 打開 border 命令 需要 框架 attribute 一個 上一篇文章說到顯示等待和隱式等待語句,我們繼續學習下面的命令方法。 8. 定位一組元素 這裏書上是自己寫了一個頁面代碼,通過訪問本地這個頁面來舉例。但我覺得找一個現有的頁面自己琢磨更有意思,而且

基於python語言的Selenium自動化測試

log 轉換成 body odi 執行 con 行為 般的 按鈕 一、Selenium簡介 Selenium是一個web自動化應用測試工具,還支持所有的web的管理任務自動化。並且開源免費,也是一個web自動化輕量級框架。它支持多種瀏覽器、跨平臺、跨操作系統、支持多種編

基於Python語言實現的購物車程式<入門小白>

1.需求: 1:啟動程式後,讓使用者輸入工資,然後列印商品列表 2:允許使用者根據商品編號購買商品 3:使用者選擇商品後,檢測餘額是否夠,夠就直接付款,不夠就提醒 4:可隨時推出,推出時,列印已購買商品和餘額 2.程式碼如下: __author__ = "B J" pro

字元圖片驗證,使用tensorflow實現卷積神經網路,進行驗證識別CNN

本專案使用卷積神經網路識別字符型圖片驗證碼,其基於 TensorFlow 框架。它封裝了非常通用的校驗、訓練、驗證、識別和呼叫 API,極大地減低了識別字符型驗證碼花費的時間和精力。  專案地址: https://github.com/nickliqian/cnn_captcha

車牌/驗證識別tensorflow版)——(2)

端到端車牌識別(2) 二 、CNN方法 4. 模型訓練 先附上程式碼train.py: """ Created on Tue Sep 5 15:37:26 2017 @author: llc """ #%% import os import numpy as

新手入門貼之基於 python 語言的介面自動化 demo 小實戰

大家好,我是正在學習介面測試的菜鳥。近期通過自己的學習,完成了一個關於測試介面的介面自動化demo。下面想跟大家分享一下,主要的思路是根據介面文件確定測試用例,並將測試用例寫在excel中。因為只是小作demo,測試用例我沒有寫的很全,有興趣的大佬自己補充一下。下面先分享介面文件,以及寫在excel中的測試用

看看大牛是怎麼用Web介面開發與自動化測試基於Python語言

感覺這篇文章應該是非常實用的。現在給大家分享下。 這裡推薦下我自己建的python群:595266089,不管你是小白還是大牛,小編我都挺歡迎,不定期分享乾貨,包括2017最新的python企業案例學習資料和零基礎入門教程,歡迎初學和進階中的小夥伴。 Ps:我下載了,但是和書中出入比

基於Python語言使用RabbitMQ訊息佇列(三)

釋出/訂閱 前面的教程中我們已經建立了一個工作佇列。在一個工作佇列背後的假設是每個任務恰好會傳遞給一個工人。在這一部分裡我們會做一些完全不同的東西——我們會發送訊息給多個消費者。這就是所謂的“釋出/訂閱”模式。 為了解釋這種模式,我們將會構建一個簡單的日誌系

python 驗證識別

驗證碼是根據隨機字元生成一幅圖片,然後在圖片中加入干擾象素,使用者必須手動填入,防止有人利用機器人自動批量註冊、灌水、發垃圾廣告等等 。 驗證碼的作用是驗證使用者是真人還是機器人;設計理念是對人友好,對機器難。 上圖是常見的字元驗證碼,還有一些驗證碼使用提問的方式。

神級程式設計師帶來的:基於PythonTensorflow的電影推薦演算法!

userIdmovieIdratingtimestamp9999967162682.5106557937010000067162694.0106514920110000167163654.0107094036310000267163852.510709796631000036

基於PythonTensorflow的電影推薦演算法

第一步:收集和清洗資料資料鏈接:https://grouplens.org/datasets/movielens/下載檔案:ml-latest-smallimport pandas as pd import numpy as np import tensorflow as tf 匯入ratings.csv檔案

《Web介面開發與自動化測試基於Python語言》–第3章

《Web介面開發與自動化測試基於Python語言》–讀書筆記 第3章 3.1 來寫個登入功能 修改/guest/sign/templates/index.html: <!DOCTYPE html> <html>

Selenium2自動化測試實戰基於Python語言》讀書筆記--第3章

第3章 Python基礎 由於作者寫的這本書完全是以Python語言為基礎的,所以需要讀者具備一定的Python程式設計能力。如果說最好的Python基礎教程,那應該說是《笨方法學Python》了。 3.1 Python哲學 <span style="colo

基於python語言的selenium自動化測試(2)-測試程式碼與指令碼程式碼分離

上一篇介紹瞭如何搭建selenium環境,也給出了一小段程式碼演示如何使用selenium 部落格不會過多的介紹如何使用selenium api 更多地在於如何構建一個自動化測試專案, 程式碼的分層是很關鍵一步,本文介紹如何使用pytest+selenium

部署一個基於python語言的web發布環境

size .org django web開發 語言 intra 平臺 close 部署 1) 一門面向對象的語言 2)擁有豐富的庫 3)可移植性 4)免費、開源 5)簡單易易學 可做軟件開發、人工智能、web開發等等 部署流程: Cnetos7

基於python語言的selenium自動化測試(1)-環境搭建

近期在寫爬蟲軟體時遇到的一些問題需要使用到selenium工具,在測試領域也同樣需要學習該工具,所以大概記錄下學習這款工具的使用以及一些問題及思考 selenium 是一個web的自動化測試工具,不少學習功能自動化的同學開始首選selenium ,相因為它相比

10.Selenium2 自動化測試實戰-基於Python語言-顯示等待

WebDriver提供了兩種型別的等待:顯示等待和隱式等待。 1.顯示等待使WebDriver等待某個條件成立時繼續執行,否則在達到最大時長時丟擲超時異常(TimeoutException)。from selenium import webdriver from selen

基於Python語言使用RabbitMQ消息隊列(一)

receiving block lose exit 想要 哪些 命名 bin 代碼 介紹 RabbitMQ 是一個消息中間人(broker): 它接收並且發送消息. 你可以把它想象成一個郵局: 當你把想要寄出的信放到郵筒裏時, 你可以確定郵遞員會把信件送到收信人那裏. 在