python神經網路例題 手寫數字的識別

2021-10-02 13:49:56 字數 4469 閱讀 3874

宣告:**和資料集均來自網路,僅供自己學習。侵刪。

我們可以從中獲得我們想要的資料集和測試集

data_file =

open

("train_100.csv"

,'r'

)data_list = data_file.readlines(

)data_file.close(

)

一行一行來看,

open()此函式能開啟乙個檔案,「r」表示唯讀(read)

readline()將檔案中的所有行讀入變數data_list.但是要注意,此函式會將所有檔案讀入到記憶體中,在檔案內容過大的情況下,不宜使用。一次在一行上使用更有效率。

最後一行close()函式關閉檔案,讓計算機釋放用於儲存檔案的部分記憶體。

在使用python之前,千萬要記得,裝一些常用庫。**裡也要用import匯入。

scaled_input=

(numpy.asfarray(all_values[1:

])/255.0

*0.99)+

0.01

print

(scaled_input)

我們知道顏色值的範圍是[255,0],我們需要將此範圍縮小到[0.01,1]的範圍裡,以上**就是為了調整範圍

由於手寫數字一共有十個且防止輸出為0或者1所以構建的目標矩陣為

onodes=

10target=numpy.zeros(onodes)

+0.01

targets[

int(all_values[0]

)]=0.99

最後我們可以寫出完整的**。

import numpy

class

neuralnetwork

:def

__init__

(self,inputnodes,hiddennodes,outputnodes,learningrate)

: self.inodes=inputnodes

self.hnodes=hiddennodes

self.onodes=outputnodes

self.wih=numpy.random.normal(

0.0,

pow(self.hnodes,

-0.5),

(self.hnodes,slef.inodes)

) self.who=numpy.random.normal(

0.0,

pow(self.onodes,

-0.5),

(self.onodes,slef.hnodes)

) self.lr=learningrate

self.activation_function=

lambda x:scipy.special.expit(x)

pass

deftrain

(self, inputs_list, targets_list)

: inputs = numpy.array(inputs_list, ndmin=2)

.t targets = numpy.array(targets_list, ndmin=2)

.t hidden_inputs = numpy.dot(self.wih, inputs)

hidden_outputs = self.activation_function(hidden_inputs)

final_inputs = numpy.dot(self.who, hidden_outputs)

final_outputs = self.activation_function(final_inputs)\n",

output_errors = targets - final_outputs

hidden_errors = numpy.dot(self.who.t, output_errors)

self.who += self.lr * numpy.dot(

(output_errors * final_outputs *

(1.0

- final_outputs)

), numpy.transpose(hidden_outputs)

) self.wih += self.lr * numpy.dot(

(hidden_errors * hidden_outputs *

(1.0

- hidden_outputs)

), numpy.transpose(inputs)

)pass

defquery

(self, inputs_list)

:\n",

inputs = numpy.array(inputs_list, ndmin=2)

.t hidden_inputs = numpy.dot(self.wih, inputs)\n",

hidden_outputs = self.activation_function(hidden_inputs)

final_inputs = numpy.dot(self.who, hidden_outputs)

final_outputs = self.activation_function(final_inputs)

return final_outputs"

input_nodes =

784 hidden_nodes =

200 output_nodes =

10

learning_rate =

0.1 n = neuralnetwork(input_nodes,hidden_nodes,output_nodes, learning_rate)

training_data_file =

open

(\"mnist_dataset/mnist_train.csv\",

'r')

training_data_list = training_data_file.readlines(

) training_data_file.close(

)for record in training_data_list:

all_values = record.split(

',')\n",

inputs =

(numpy.asfarray(all_values[1:

])/255.0

*0.99)+

0.01

targets = numpy.zeros(output_nodes)

+0.01

targets[

int(all_values[0]

)]=0.99

n.train(inputs, targets)\n",

pass

test_data_file =

open

(\"mnist_dataset/mnist_test.csv\",

'r')

test_data_list = test_data_file.readlines(

) test_data_file.close(

)

我們發現,通過簡單的幾行**,就可以正確區分沒有見過的。並且訓練的個數其實還是很少的。

如果我們改進了網路,那麼會提高麼?

所以我們需要用乙個分數去衡量網路的學習能力,我們稱之為記分卡(scorecard)這個模組在每次測試每條資料後都會更新

for record in test_data_list:

all_values = record.split(

',')

correct_label =

int(all_values[0]

) inputs =

(numpy.asfarray(all_values[1:

])/255.0

*0.99)+

0.01

outputs = n.query(inputs)

label = numpy.argmax(outputs)

if(label == correct_label):1

)else:0

)pass

然後我們需要計算正確率

scorecard_array = numpy.asarray(scorecard)

print

(\"performance = \", scorecard_array.

sum(

)/ scorecard_array.size)

到這裡,利用少量資料訓練的工作就完成了。有精力的話,我們可以使用完整的資料來訓練和測試。

Python手寫神經網路

在利用向量機實現閘電路時鏈結,我們人工確定了合適的權重,那麼神經網路要處理的就是如何從資料中學習到合適的權重引數,就是所謂bp神經網路 那麼筆者在此先實現乙個前置的神經網路 乙個兩層隱藏層,第一層為三個神經元,第二層為兩個神經元的神經網路 import numpy as np def sigmoid...

用Kersa搭建神經網路 MNIST手寫資料集

nist手寫資料集的識別算得上是深度學習的 hello world 了,所以想要入門必須得掌握。新手入門可以考慮使用keras框架達到快速實現的目的。完整 如下 1.導入庫和模組 from keras.models import sequential from keras.layers import...

神經網路 python實現神經網路

神經網路系列目錄 神經網路 神經網路原理介紹 bp演算法 神經網路 sklearn引數介紹及應用 神經網路實戰 主播綜合評分回歸 實戰 最小二乘法 梯度下降法區別及python實現 本篇博文通過python 實現神經網路,採用sklearn自帶的手寫數字集,看分類情況如何 一 匯入資料集並標準化 資...