00.寫在前面
由於最近要出去實習,所以開始接觸機器學習的內容,逐步將自己的實驗內容整理成博,以供以後使用。這次主要是關於驗證碼的識別和手寫數字的識別,其實兩者根本上是相同的原理
工具: pycharm + python3.5 + keras
01.訓練資料的獲取
為了能得到後面實驗所需的資料,我自己手寫了一部分資料用於製作訓練資料,並將其轉化為數字格式。
1.1 調整影象大小與明暗,使得手寫部分更為突出
這裡在ps裡面調整為32*32畫素的大小,並且更改了對比度等,使得手寫部分更為容易識別。
1.2 轉為數字文字
我們知道在演算法當中,直接的是無法識別的,需要使用能表徵特徵的元素來代替它。所以這裡很容易想到用的畫素值來代替,即原本的白色用0表示,黑色用1表示。(這裡存在一定問題,在畫素改變後,原本的黑色畫素值不再是(0,0,0)而是接近黑色的灰色,所以在程式中可以識別白色,然後剩下的賦1。這裡假設都是優質資料,所以直接按黑白來區分了)
ps.讀取的時候,會被顛倒,不是你在windows裡面看到的樣子,所以是getpixel((j,i))
1.3 重複操作,得到足夠多的訓練樣本02.資料的預處理
def
datatoarray
(fname):
arr =
fh = open(fname)
for i in range(0, 32):
thisline = fh.readline()
for j in range(0, 32):
return arr
defseplabel
(fname):
filestr = fname.split(".")[0]
label = int(filestr.split("_")[0])
return label
deftraindata
(): labels =
trainfile = listdir("d:/13.nervenet/traindata")
num = len(trainfile)
# 長度1024(列),每一行儲存乙個檔案
# 用乙個陣列儲存所有訓練資料,行:檔案總數,列:1024
trainarr=zeros((num, 1024))
for i in range(0, num):
thisfname = trainfile[i]
thislabel = seplabel(thisfname)
trainarr[i, :] = datatoarray("d:/13.nervenet/traindata/"+thisfname)
return trainarr, labels
trainarr, labels = traindata()
# 資料型別和儲存格式的轉換
xf = pda.dataframe(trainarr)
yf = pda.dataframe(labels)
tx2 = xf.as_matrix().astype(int)
ty2 = yf.as_matrix().astype(int)
03.資料的預處理根據bp神經網路的原理,確定輸入層、輸出層、啟用函式等引數。
model = sequential()
# 輸入層
# 需指定輸入層的層數和特徵維數
model.add(dense(10, input_dim=1024))
model.add(activation("relu"))
# 輸出層
model.add(dense(1, input_dim=1))
model.add(activation("sigmoid"))
# 模型的編譯
model.compile(loss="mean_squared_error", optimizer="adam")
# 訓練
model.fit(tx2, ty2, nb_epoch=10000, batch_size=10)
# **分類
rst = model.predict_classes(tx2).reshape(len(tx2))
# 計算正確率
x = 0
for i in range(0, len(tx2)):
if rst[i] != ty2[i]:
x += 1
print(1-x/len(tx2))
04.寫在最後 Keras深度學習 卷積神經網路 手寫數字識別
引言 最近在閉關學習中,由於多久沒有寫部落格了,今天給大家帶來學習的一些內容,還在學習神經網路的同學,跑一跑下面的 給你一些自信吧!nice 奧里給!正文 首先該impor的庫就不多說了,不會的就pip install something that you got it 備註 mnist.npz資源...
帶你入門機器學習 卷積神經網路識別手寫數字
未來的程式設計師分為兩種,會機器學習和不會的 原博位址laboo.top 2018 11 21 digit recognizer github laziji.github.io digit recog 演示開始時需要載入大概100m的訓練資料,稍等片刻 調整訓練集的大小,觀察測試結果的準確性 資料 ...
機器學習之人工神經網路演算法
機器學習中有乙個重要的演算法,那就是人工神經網路演算法,聽到這個名稱相信大家能夠想到人體中的神經。其實這種演算法和人工神經有一點點相似。當然,這種演算法能夠解決很多的問題,因此在機器學習中有著很高的地位。下面我們就給大家介紹一下關於人工神經網路演算法的知識。1.神經網路的 我們聽到神經網路的時候也時...