python手寫識別數字源碼的簡單介紹

本文目錄一覽:

怎麼用python識別數字

str = input(“please input the number:”)

if str.isdigit(): #為True,表示輸入的所有字元都是數字.

if str.isalnum()  #為True,表示輸入的字元中有數字.

str.isalpha()     #為True,表示輸入的所有字元都是字母.

python svm 怎麼訓練模型

支持向量機SVM(Support Vector Machine)是有監督的分類預測模型,本篇文章使用機器學習庫scikit-learn中的手寫數字數據集介紹使用Python對SVM模型進行訓練並對手寫數字進行識別的過程。

準備工作

手寫數字識別的原理是將數字的圖片分割為8X8的灰度值矩陣,將這64個灰度值作為每個數字的訓練集對模型進行訓練。手寫數字所對應的真實數字作為分類結果。在機器學習sklearn庫中已經包含了不同數字的8X8灰度值矩陣,因此我們首先導入sklearn庫自帶的datasets數據集。然後是交叉驗證庫,SVM分類演算法庫,繪製圖表庫等。

12345678910

#導入自帶數據集from sklearn import datasets#導入交叉驗證庫from sklearn import cross_validation#導入SVM分類演算法庫from sklearn import svm#導入圖表庫import matplotlib.pyplot as plt#生成預測結果準確率的混淆矩陣from sklearn import metrics

讀取並查看數字矩陣

從sklearn庫自帶的datasets數據集中讀取數字的8X8矩陣信息並賦值給digits。

12

#讀取自帶數據集並賦值給digitsdigits = datasets.load_digits()

查看其中的數字9可以發現,手寫的數字9以64個灰度值保存。從下面的8×8矩陣中很難看出這是數字9。

12

#查看數據集中數字9的矩陣digits.data[9]

以灰度值的方式輸出手寫數字9的圖像,可以看出個大概輪廓。這就是經過切割並以灰度保存的手寫數字9。它所對應的64個灰度值就是模型的訓練集,而真實的數字9是目標分類。我們的模型所要做的就是在已知64個灰度值與每個數字對應關係的情況下,通過對模型進行訓練來對新的手寫數字對應的真實數字進行分類。

1234

#繪製圖表查看數據集中數字9的圖像plt.imshow(digits.images[9], cmap=plt.cm.gray_r, interpolation=’nearest’)plt.title(‘digits.target[9]’)plt.show()

設置模型的特徵X和預測目標Y

查看數據集中的分類目標,可以看到一共有10個分類,分布為0-9。我們將這個分類目標賦值給Y,作為模型的預測目標。

12

#數據集中的目標分類digits.target

12

#將數據集中的目標賦給YY=digits.target

手寫數字的64個灰度值作為特徵賦值給X,這裡需要說明的是64個灰度值是以8×8矩陣的形式保持的,因此我們需要使用reshape函數重新調整矩陣的行列數。這裡也就是將8×8的兩維數據轉換為64×1的一維數據。

123

#使用reshape函數對矩陣進行轉換,並賦值給Xn_samples = len(digits.images)X = digits.images.reshape((n_samples, 64))

查看特徵值X和預測目標Y的行數,共有1797行,也就是說數據集中共有1797個手寫數字的圖像,64列是經過我們轉化後的灰度值。

12

#查看X和Y的行數X.shape,Y.shape

將數據分割為訓練集和測試集

將1797個手寫數字的灰度值採用隨機抽樣的方法分割為訓練集和測試集,其中訓練集為60%,測試集為40%。

12

#隨機抽取生成訓練集和測試集,其中訓練集的比例為60%,測試集40%X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, Y, test_size=0.4, random_state=0)

查看分割後的測試集數據,共有1078條數據。這些數據將用來訓練SVM模型。

12

#查看訓練集的行數X_train.shape,y_train.shape

對SVM模型進行訓練

將訓練集數據X_train和y_train代入到SVM模型中,對模型進行訓練。下面是具體的代碼和結果。

12

#生成SVM分類模型clf = svm.SVC(gamma=0.001)

12

#使用訓練集對svm分類模型進行訓練clf.fit(X_train, y_train)

使用測試集測對模型進行測試

使用測試集數據X_test和y_test對訓練後的SVM模型進行檢驗,模型對手寫數字分類的準確率為99.3%。這是非常高的準確率。那麼是否真的這麼靠譜嗎?下面我們來單獨測試下。

12

#使用測試集衡量分類模型準確率clf.score(X_test, y_test)

我們使用測試集的特徵X,也就是每個手寫數字的64個灰度值代入到模型中,讓SVM模型進行分類。

12

#對測試集數據進行預測predicted=clf.predict(X_test)

然後查看前20個手寫數字的分類結果,也就是手寫數字所對應的真實數字。下面是具體的分類結果。

12

#查看前20個測試集的預測結果predicted[:20]

再查看訓練集中前20個分類結果,也就是真實數字的情況,並將之前的分類結果與測試集的真實結果進行對比。

12

#查看測試集中的真實結果expected=y_test

以下是測試集中前20個真實數字的結果,與前面SVM模型的分類結果對比,前20個結果是一致的。

12

#查看測試集中前20個真實結果expected[:20]

使用混淆矩陣來看下SVM模型對所有測試集數據的預測與真實結果的準確率情況,下面是一個10X10的矩陣,左上角第一行第一個數字60表示實際為0,SVM模型也預測為0的個數,第一行第二個數字表示實際為0,SVM模型預測為1的數字。第二行第二個數字73表示實際為1,SVM模型也預測為1的個數。

12

#生成準確率的混淆矩陣(Confusion matrix)metrics.confusion_matrix(expected, predicted)

從混淆矩陣中可以看到,大部分的數字SVM的分類和預測都是正確的,但也有個別的數字分類錯誤,例如真實的數字2,SVM模型有一次錯誤的分類為1,還有一次錯誤分類為7。

誰可以提供Python環境中用KNN手寫識別數據MNIST的讀取代碼

其實就是python怎麼讀取binnary

file

mnist的結構如下,選取train-images

TRAINING

SET

IMAGE

FILE

(train-images-idx3-ubyte):

[offset]

[type]

[value]

[description]

0000

32

bit

integer

0x00000803(2051)

magic

number

0004

32

bit

integer

60000

number

of

images

0008

32

bit

integer

28

number

of

rows

0012

32

bit

integer

28

number

of

columns

0016

unsigned

byte

??

pixel

0017

unsigned

byte

??

pixel

……..

xxxx

unsigned

byte

??

pixel

也就是之前我們要讀取4個

32

bit

integer

試過很多方法,覺得最方便的,至少對我來說還是使用

struct.unpack_from()

filename

=

‘train-images.idx3-ubyte’binfile

=

open(filename

,

‘rb’)buf

=

binfile.read()

先使用二進位方式把文件都讀進來

index

=

0magic,

numImages

,

numRows

,

numColumns

=

struct.unpack_from(‘IIII’

,

buf

,

index)index

+=

struct.calcsize(‘IIII’)

然後使用struc.unpack_from

‘IIII’是說使用大端法讀取4個unsinged

int32

然後讀取一個圖片測試是否讀取成功

im

=

struct.unpack_from(‘784B’

,buf,

index)index

+=

struct.calcsize(‘784B’)

im

=

np.array(im)im

=

im.reshape(28,28)

fig

=

plt.figure()plotwindow

=

fig.add_subplot(111)plt.imshow(im

,

cmap=’gray’)plt.show()

‘784B’的意思就是用大端法讀取784個unsigned

byte

完整代碼如下

import

numpy

as

npimport

structimport

matplotlib.pyplot

as

plt

filename

=

‘train-images.idx3-ubyte’binfile

=

open(filename

,

‘rb’)buf

=

binfile.read()

index

=

0magic,

numImages

,

numRows

,

numColumns

=

struct.unpack_from(‘IIII’

,

buf

,

index)index

+=

struct.calcsize(‘IIII’)

im

=

struct.unpack_from(‘784B’

,buf,

index)index

+=

struct.calcsize(‘784B’)

im

=

np.array(im)im

=

im.reshape(28,28)

fig

=

plt.figure()plotwindow

=

fig.add_subplot(111)plt.imshow(im

,

cmap=’gray’)plt.show()

只是為了測試是否成功所以只讀了一張圖片

對於一個學完python編程基礎知識想做出一個手寫漢字識別的項目出來,需要學習什麼?

對於漢字識別你可以考慮一下baidu aip

pip install baidu-aip

每人每天有500次識別的機會。

如何利用Python做簡單的驗證碼識別

1   摘要

驗證碼是目前互聯網上非常常見也是非常重要的一個事物,充當著很多系統的 防火牆 功能,但是隨時OCR技術的發展,驗證碼暴露出來的安全問題也越來越嚴峻。本文介紹了一套字元驗證碼識別的完整流程,對於驗證碼安全和OCR識別技術都有一定的借鑒意義。

然後經過了一年的時間,筆者又研究和get到了一種更強大的基於CNN卷積神經網路的直接端到端的驗證識別技術(文章不是我的,然後我把源碼整理了下,介紹和源碼在這裡面):

基於python語言的tensorflow的『端到端』的字元型驗證碼識別源碼整理(github源碼分享)

2   關鍵詞

關鍵詞:安全,字元圖片,驗證碼識別,OCR,Python,SVM,PIL

3   免責聲明

本文研究所用素材來自於某舊Web框架的網站 完全對外公開 的公共圖片資源。

本文只做了該網站對外公開的公共圖片資源進行了爬取, 並未越權 做任何多餘操作。

本文在書寫相關報告的時候已經 隱去 漏洞網站的身份信息。

本文作者 已經通知 網站相關人員此系統漏洞,並積極向新系統轉移。

本報告的主要目的也僅是用於 OCR交流學習 和引起大家對 驗證安全的警覺 。

4   引言

關於驗證碼的非技術部分的介紹,可以參考以前寫的一篇科普類的文章:

互聯網安全防火牆(1)–網路驗證碼的科普

裡面對驗證碼的種類,使用場景,作用,主要的識別技術等等進行了講解,然而並沒有涉及到任何技術內容。本章內容則作為它的 技術補充 來給出相應的識別的解決方案,讓讀者對驗證碼的功能及安全性問題有更深刻的認識。

5   基本工具

要達到本文的目的,只需要簡單的編程知識即可,因為現在的機器學習領域的蓬勃發展,已經有很多封裝好的開源解決方案來進行機器學習。普通程序員已經不需要了解複雜的數學原理,即可以實現對這些工具的應用了。

主要開發環境:

python3.5

python SDK版本

PIL

圖片處理庫

libsvm

開源的svm機器學習庫

關於環境的安裝,不是本文的重點,故略去。

6   基本流程

一般情況下,對於字元型驗證碼的識別流程如下:

準備原始圖片素材

圖片預處理

圖片字元切割

圖片尺寸歸一化

圖片字元標記

字元圖片特徵提取

生成特徵和標記對應的訓練數據集

訓練特徵標記數據生成識別模型

使用識別模型預測新的未知圖片集

達到根據「圖片」就能返回識別正確的字符集的目標

7   素材準備

7.1   素材選擇

由於本文是以初級的學習研究目的為主,要求 「有代表性,但又不會太難」 ,所以就直接在網上找個比較有代表性的簡單的字元型驗證碼(感覺像在找漏洞一樣)。

最後在一個比較舊的網站(估計是幾十年前的網站框架)找到了這個驗證碼圖片。

原始圖:

放大清晰圖:

此圖片能滿足要求,仔細觀察其具有如下特點。

有利識別的特點 :

由純阿拉伯數字組成

字數為4位

字元排列有規律

字體是用的統一字體

以上就是本文所說的此驗證碼簡單的重要原因,後續代碼實現中會用到

不利識別的特點 :

圖片背景有干擾噪點

這雖然是不利特點,但是這個干擾門檻太低,只需要簡單的方法就可以除去

7.2   素材獲取

由於在做訓練的時候,需要大量的素材,所以不可能用手工的方式一張張在瀏覽器中保存,故建議寫個自動化下載的程序。

主要步驟如下:

通過瀏覽器的抓包功能獲取隨機圖片驗證碼生成介面

批量請求介面以獲取圖片

將圖片保存到本地磁碟目錄中

這些都是一些IT基本技能,本文就不再詳細展開了。

關於網路請求和文件保存的代碼,如下:

def downloads_pic(**kwargs):

   pic_name = kwargs.get(‘pic_name’, None)

   url = ‘httand_code_captcha/’

   res = requests.get(url, stream=True)

   with open(pic_path + pic_name+’.bmp’, ‘wb’) as f:        for chunk in res.iter_content(chunk_size=1024):            if chunk:  # filter out keep-alive new chunks                f.write(chunk)

               f.flush()

       f.close()

循環執行N次,即可保存N張驗證素材了。

下面是收集的幾十張素材庫保存到本地文件的效果圖:

8   圖片預處理

雖然目前的機器學習演算法已經相當先進了,但是為了減少後面訓練時的複雜度,同時增加識別率,很有必要對圖片進行預處理,使其對機器識別更友好。

針對以上原始素材的處理步驟如下:

讀取原始圖片素材

將彩色圖片二值化為黑白圖片

去除背景噪點

8.1   二值化圖片

主要步驟如下:

將RGB彩圖轉為灰度圖

將灰度圖按照設定閾值轉化為二值圖

image = Image.open(img_path)

imgry = image.convert(‘L’)  # 轉化為灰度圖table = get_bin_table()

out = imgry.point(table, ‘1’)

上面引用到的二值函數的定義如下:

1234567891011121314   def get_bin_table(threshold=140):    “””    獲取灰度轉二值的映射table    :param threshold:    :return:    “””    table = []    for i in range(256):        if i threshold:            table.append(0)        else:            table.append(1)     return table   

由PIL轉化後變成二值圖片:0表示黑色,1表示白色。二值化後帶噪點的 6937 的像素點輸出後如下圖:

1111000111111000111111100001111100000011

1110111011110111011111011110111100110111

1001110011110111101011011010101101110111

1101111111110110101111110101111111101111

1101000111110111001111110011111111101111

1100111011111000001111111001011111011111

1101110001111111101011010110111111011111

1101111011111111101111011110111111011111

1101111011110111001111011110111111011100

1110000111111000011101100001110111011111

如果你是近視眼,然後離屏幕遠一點,可以隱約看到 6937 的骨架了。

8.2   去除噪點

在轉化為二值圖片後,就需要清除噪點。本文選擇的素材比較簡單,大部分噪點也是最簡單的那種 孤立點,所以可以通過檢測這些孤立點就能移除大量的噪點。

關於如何去除更複雜的噪點甚至干擾線和色塊,有比較成熟的演算法: 洪水填充法 Flood Fill ,後面有興趣的時間可以繼續研究一下。

本文為了問題簡單化,乾脆就用一種簡單的自己想的 簡單辦法 來解決掉這個問題:

對某個 黑點 周邊的九宮格裡面的黑色點計數

如果黑色點少於2個則證明此點為孤立點,然後得到所有的孤立點

對所有孤立點一次批量移除。

下面將詳細介紹關於具體的演算法原理。

將所有的像素點如下圖分成三大類

頂點A

非頂點的邊界點B

內部點C

種類點示意圖如下:

其中:

A類點計算周邊相鄰的3個點(如上圖紅框所示)

B類點計算周邊相鄰的5個點(如上圖紅框所示)

C類點計算周邊相鄰的8個點(如上圖紅框所示)

當然,由於基準點在計算區域的方向不同,A類點和B類點還會有細分:

A類點繼續細分為:左上,左下,右上,右下

B類點繼續細分為:上,下,左,右

C類點不用細分

然後這些細分點將成為後續坐標獲取的準則。

主要演算法的python實現如下:

def sum_9_region(img, x, y):    “””

   9鄰域框,以當前點為中心的田字框,黑點個數

   :param x:

   :param y:

   :return:    “””

   # todo 判斷圖片的長寬度下限

   cur_pixel = img.getpixel((x, y))  # 當前像素點的值

   width = img.width

   height = img.height    if cur_pixel == 1:  # 如果當前點為白色區域,則不統計鄰域值

       return 0    if y == 0:  # 第一行

       if x == 0:  # 左上頂點,4鄰域

           # 中心點旁邊3個點

           sum = cur_pixel \                  + img.getpixel((x, y + 1)) \                  + img.getpixel((x + 1, y)) \                  + img.getpixel((x + 1, y + 1))            return 4 – sum        elif x == width – 1:  # 右上頂點

           sum = cur_pixel \                  + img.getpixel((x, y + 1)) \                  + img.getpixel((x – 1, y)) \                  + img.getpixel((x – 1, y + 1))            return 4 – sum        else:  # 最上非頂點,6鄰域

           sum = img.getpixel((x – 1, y)) \                  + img.getpixel((x – 1, y + 1)) \                  + cur_pixel \                  + img.getpixel((x, y + 1)) \                  + img.getpixel((x + 1, y)) \                  + img.getpixel((x + 1, y + 1))            return 6 – sum    elif y == height – 1:  # 最下面一行

       if x == 0:  # 左下頂點

           # 中心點旁邊3個點

           sum = cur_pixel \                  + img.getpixel((x + 1, y)) \                  + img.getpixel((x + 1, y – 1)) \                  + img.getpixel((x, y – 1))            return 4 – sum        elif x == width – 1:  # 右下頂點

           sum = cur_pixel \                  + img.getpixel((x, y – 1)) \                  + img.getpixel((x – 1, y)) \                  + img.getpixel((x – 1, y – 1))            return 4 – sum        else:  # 最下非頂點,6鄰域

           sum = cur_pixel \                  + img.getpixel((x – 1, y)) \                  + img.getpixel((x + 1, y)) \                  + img.getpixel((x, y – 1)) \                  + img.getpixel((x – 1, y – 1)) \                  + img.getpixel((x + 1, y – 1))            return 6 – sum    else:  # y不在邊界

       if x == 0:  # 左邊非頂點

           sum = img.getpixel((x, y – 1)) \                  + cur_pixel \                  + img.getpixel((x, y + 1)) \                  + img.getpixel((x + 1, y – 1)) \                  + img.getpixel((x + 1, y)) \                  + img.getpixel((x + 1, y + 1))            return 6 – sum        elif x == width – 1:  # 右邊非頂點

           # print(‘%s,%s’ % (x, y))

           sum = img.getpixel((x, y – 1)) \                  + cur_pixel \                  + img.getpixel((x, y + 1)) \                  + img.getpixel((x – 1, y – 1)) \                  + img.getpixel((x – 1, y)) \                  + img.getpixel((x – 1, y + 1))            return 6 – sum        else:  # 具備9領域條件的

           sum = img.getpixel((x – 1, y – 1)) \                  + img.getpixel((x – 1, y)) \                  + img.getpixel((x – 1, y + 1)) \                  + img.getpixel((x, y – 1)) \                  + cur_pixel \                  + img.getpixel((x, y + 1)) \                  + img.getpixel((x + 1, y – 1)) \                  + img.getpixel((x + 1, y)) \                  + img.getpixel((x + 1, y + 1))            return 9 – sum

Tips:這個地方是相當考驗人的細心和耐心程度了,這個地方的工作量還是蠻大的,花了半個晚上的時間才完成的。

計算好每個像素點的周邊像素黑點(注意:PIL轉化的圖片黑點的值為0)個數後,只需要篩選出個數為 1或者2 的點的坐標即為 孤立點 。這個判斷方法可能不太準確,但是基本上能夠滿足本文的需求了。

經過預處理後的圖片如下所示:

對比文章開頭的原始圖片,那些 孤立點 都被移除掉,相對比較 乾淨 的驗證碼圖片已經生成。

9   圖片字元切割

由於字元型 驗證碼圖片 本質就可以看著是由一系列的 單個字元圖片 拼接而成,為了簡化研究對象,我們也可以將這些圖片分解到 原子級 ,即: 只包含單個字元的圖片。

於是,我們的研究對象由 「N種字串的組合對象」 變成 「10種阿拉伯數字」 的處理,極大的簡化和減少了處理對象。

9.1   分割演算法

現實生活中的字元驗證碼的產生千奇百怪,有各種扭曲和變形。關於字元分割的演算法,也沒有很通用的方式。這個演算法也是需要開發人員仔細研究所要識別的字元圖片的特點來制定的。

當然,本文所選的研究對象盡量簡化了這個步驟的難度,下文將慢慢進行介紹。

使用圖像編輯軟體(PhoneShop或者其它)打開驗證碼圖片,放大到像素級別,觀察其它一些參數特點:

可以得到如下參數:

整個圖片尺寸是 40*10

單個字元尺寸是 6*10

左右字元和左右邊緣相距2個像素

字元上下緊挨邊緣(即相距0個像素)

這樣就可以很容易就定位到每個字元在整個圖片中佔據的像素區域,然後就可以進行分割了,具體代碼如下:

def get_crop_imgs(img):    “””

   按照圖片的特點,進行切割,這個要根據具體的驗證碼來進行工作. # 見原理圖

   :param img:

   :return:    “””

   child_img_list = []    for i in range(4):

       x = 2 + i * (6 + 4)  # 見原理圖

       y = 0

       child_img = img.crop((x, y, x + 6, y + 10))

       child_img_list.append(child_img)    return child_img_list

然後就能得到被切割的 原子級 的圖片元素了:

9.2   內容小結

基於本部分的內容的討論,相信大家已經了解到了,如果驗證碼的干擾(扭曲,噪點,干擾色塊,干擾線……)做得不夠強的話,可以得到如下兩個結論:

4位字元和40000位字元的驗證碼區別不大

純字母

不區分大小寫。分類數為26

區分大小寫。分類數為52

純數字。分類數為10

數字和區分大小寫的字母組合。分類數為62

純數字 和 數字及字母組合 的驗證碼區別不大

在沒有形成 指數級或者幾何級 的難度增加,而只是 線性有限級 增加計算量時,意義不太大。

10   尺寸歸一

本文所選擇的研究對象本身尺寸就是統一狀態:6*10的規格,所以此部分不需要額外處理。但是一些進行了扭曲和縮放的驗證碼,則此部分也會是一個圖像處理的難點。

11   模型訓練步驟

在前面的環節,已經完成了對單個圖片的處理和分割了。後面就開始進行 識別模型 的訓練了。

整個訓練過程如下:

大量完成預處理並切割到原子級的圖片素材準備

對素材圖片進行人為分類,即:打標籤

定義單張圖片的識別特徵

使用SVM訓練模型對打了標籤的特徵文件進行訓練,得到模型文件

12   素材準備

本文在訓練階段重新下載了同一模式的4數字的驗證圖片總計:3000張。然後對這3000張圖片進行處理和切割,得到12000張原子級圖片。

在這12000張圖片中刪除一些會影響訓練和識別的強幹擾的干擾素材,切割後的效果圖如下:

13   素材標記

由於本文使用的這種識別方法中,機器在最開始是不具備任何 數字的觀念的。所以需要人為的對素材進行標識,告訴 機器什麼樣的圖片的內容是 1……。

這個過程叫做 「標記」。

具體打標籤的方法是:

為0~9每個數字建立一個目錄,目錄名稱為相應數字(相當於標籤)

人為判定 圖片內容,並將圖片拖到指定數字目錄中

每個目錄中存放100張左右的素材

一般情況下,標記的素材越多,那麼訓練出的模型的分辨能力和預測能力越強。例如本文中,標記素材為十多張的時候,對新的測試圖片識別率基本為零,但是到達100張時,則可以達到近乎100%的識別率

14   特徵選擇

對於切割後的單個字元圖片,像素級放大圖如下:

從宏觀上看,不同的數字圖片的本質就是將黑色按照一定規則填充在相應的像素點上,所以這些特徵都是最後圍繞像素點進行。

字元圖片 寬6個像素,高10個像素 ,理論上可以最簡單粗暴地可以定義出60個特徵:60個像素點上面的像素值。但是顯然這樣高維度必然會造成過大的計算量,可以適當的降維。

通過查閱相應的文獻 [2],給出另外一種簡單粗暴的特徵定義:

每行上黑色像素的個數,可以得到10個特徵

每列上黑色像素的個數,可以得到6個特徵

最後得到16維的一組特徵,實現代碼如下:

def get_feature(img):    “””

   獲取指定圖片的特徵值,

   1. 按照每排的像素點,高度為10,則有10個維度,然後為6列,總共16個維度

   :param img_path:

   :return:一個維度為10(高度)的列表    “””

   width, height = img.size

   pixel_cnt_list = []

   height = 10    for y in range(height):

       pix_cnt_x = 0        for x in range(width):            if img.getpixel((x, y)) == 0:  # 黑色點

               pix_cnt_x += 1

       pixel_cnt_list.append(pix_cnt_x)    for x in range(width):

       pix_cnt_y = 0        for y in range(height):            if img.getpixel((x, y)) == 0:  # 黑色點

               pix_cnt_y += 1

       pixel_cnt_list.append(pix_cnt_y)    return pixel_cnt_list

然後就將圖片素材特徵化,按照 libSVM 指定的格式生成一組帶特徵值和標記值的向量文

怎樣用python實現深度學習

基於Python的深度學習庫、深度學習方向、機器學習方向、自然語言處理方向的一些網站基本都是通過Python來實現的。

機器學習,尤其是現在火爆的深度學習,其工具框架大都提供了Python介面。Python在科學計算領域一直有著較好的聲譽,其簡潔清晰的語法以及豐富的計算工具,深受此領域開發者喜愛。

早在深度學習以及Tensorflow等框架流行之前,Python中即有scikit-learn,能夠很方便地完成幾乎所有機器學習模型,從經典數據集下載到構建模型只需要簡單的幾行代碼。配合Pandas、matplotlib等工具,能很簡單地進行調整。

而Tensorflow、PyTorch、MXNet、Keras等深度學習框架更是極大地拓展了機器學習的可能。使用Keras編寫一個手寫數字識別的深度學習網路僅僅需要寥寥數十行代碼,即可藉助底層實現,方便地調用包括GPU在內的大量資源完成工作。

值得一提的是,無論什麼框架,Python只是作為前端描述用的語言,實際計算則是通過底層的C/C++實現。由於Python能很方便地引入和使用C/C++項目和庫,從而實現功能和性能上的擴展,這樣的大規模計算中,讓開發者更關注邏輯於數據本身,而從內存分配等繁雜工作中解放出來,是Python被廣泛應用到機器學習領域的重要原因。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/284537.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-22 15:41
下一篇 2024-12-22 15:41

相關推薦

  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29

發表回復

登錄後才能評論