資源簡介
利用Python實現的BP神經網絡進行人臉識別,源碼公開,打開就能使用,歡迎大家學習借鑒,進制使用于非法用途或者有損他人利益。
代碼片段和文件信息
#coding=utf8
from?neuralnetworktool?import?*
import?random
import?traceback
class?Neuron():
def?__init__(selfnInput?=?0studyspeed?=?1thresholdFunc?=?sigmoidX):
self.nInput?=?nInput
#init?the?weight?in?range?-1?to?1
randomweights?=?[random.uniform(-1?1)?for?i?in?range(nInput)]
self.weights?=?randomweights
self.thresholdFunc?=?thresholdFunc
self.studyspeed?=?studyspeed
self.inputs?=?[]
def?setInputs(selfinputs):
self.inputs?=?inputs
def?getInputs(self):
return?self.inputs
def?getOutput(selfinputs):
self.inputs?=?inputs
outputs?=?np.squeeze(np.asarray(self.weights?*?inputs))
#for?i?in?range(len(self.weights)):
# outputs?+=?self.weights[i]?*?self.inputs[i]
return?round(self.thresholdFunc(outputs)3)
def?adjustWeights(selfinputsexceptOutputrealOutput?=?None):
if?realOutput?==?None:
f?=?self.getOutput(inputs)
else:
f?=?realOutput
d?=?exceptOutput
r?=?(d?-?f)?*?f?*?(1?-?f)
self.adjustWeightsWithR(r)
return?r
#R反映出網絡輸出的平方差對相應的sigmoid函數的輸入中的變化的敏感度
def?adjustWeightsWithR(selfR):
self.weights?+=?self.studyspeed?*?R?*??np.transpose(self.inputs)
def?getWeights(self):
return?np.squeeze(np.asarray(self.weights))
def?getWeightsMatrix(self):
return?self.weights
def?setWeights(selfweights):
self.weights?=?np.matrix(weights)
def?setStudySpeed(selfstudyspeed):
self.studyspeed?=?studyspeed
def?printInfo(self):
print?self.weights
class?NeuralNetWork():
def?__init__(selfnInput=0nHide=0nOutput=0studyspeed=0):
self.nInput?=?nInput
self.nHide?=?nHide
self.nOutput?=?nOutput
self.studyspeed?=?studyspeed
self.inputNeurons?=?[0?for?i?in?range(nInput)]
self.hideNeurons?=?[
Neuron(nInput?=?nInputstudyspeed?=?studyspeed)?for?i?in?range(nHide)]
self.outputNeurons?=?[
Neuron(nInput?=?nHidestudyspeed?=?studyspeed)?for?i?in?range(nOutput)]
def?backpropagation(selftrainings=[]examples=[]):
for?i?in?range(len(trainings)):
self.backpropagationSingle(
training?=?trainings[i]
example?=?examples[i]
)
def?backpropagationSingle(selftrainingexample):
#d為訓練集目標輸出
d?=?example
#輸入轉化為單列矩陣
self.inputNeurons?=?np.transpose(np.matrix(training))
#用于保存隱藏層輸出
hideoutputs?=?[]
#對輸入層作為輸入,得到隱藏層輸出結果
for?hideNeuron?in?self.hideNeurons:
hideoutputs.append(hideNeuron.getOutput(self.inputNeurons))
#將隱藏層結果作為輸出層的輸入,得到輸出層的結果
outputlayeroutputs?=?[]
hideOutPutMatrixs?=??np.transpose(np.matrix(hideoutputs))
for?outputNeuron?in?self.outputNeurons:
outputlayeroutputs.append(outputNeuron.getOutput(hideOutPutMatrixs))
#輸出層結果與期望結果做比較,并且反向傳播調節
#保存調節前輸出層權值
beforeweights?=?[]
#對輸出層進行調節
#保存輸出層各個神經元的調節因子
outputRs?=?[]
for?i?in?range(self.nOutput):
#f為實際輸出結果
f?=?outputlayeroutputs[i]
outputR?=?(d[i]?-?f)?*?f?*?(1?-?f)
outputRs.append(outputR)
#保存第i個輸出神經元的調節前權值
beforeweights.append(self.outputNeurons[i].getWeights())
#對每個輸出層神經元進行調節
self.outputNeurons[i].adjustWeightsWithR(outputR)
#對隱藏層進行調節
for?i?in?range(s
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2016-05-05?03:06??NeuralNetwork-master\
?????文件?????????378??2016-05-05?03:06??NeuralNetwork-master\.gitattributes
?????文件?????????655??2016-05-05?03:06??NeuralNetwork-master\.gitignore
?????文件?????????744??2016-05-05?03:06??NeuralNetwork-master\README.md
?????文件???????????0??2016-05-05?03:06??NeuralNetwork-master\TestConfig.txt
?????目錄???????????0??2016-05-05?03:06??NeuralNetwork-master\data\
?????目錄???????????0??2016-05-05?03:06??NeuralNetwork-master\data\faces\
?????文件?????????131??2016-05-05?03:06??NeuralNetwork-master\data\faces\.anonr
?????目錄???????????0??2016-05-05?03:06??NeuralNetwork-master\data\faces\an2i\
?????文件???????42648??2016-05-05?03:06??NeuralNetwork-master\data\faces\an2i\an2i_left_angry_open.pgm
?????文件????????3853??2016-05-05?03:06??NeuralNetwork-master\data\faces\an2i\an2i_left_angry_open_2.pgm
?????文件?????????973??2016-05-05?03:06??NeuralNetwork-master\data\faces\an2i\an2i_left_angry_open_4.pgm
?????文件???????42480??2016-05-05?03:06??NeuralNetwork-master\data\faces\an2i\an2i_left_angry_sunglasses.pgm
?????文件????????3853??2016-05-05?03:06??NeuralNetwork-master\data\faces\an2i\an2i_left_angry_sunglasses_2.pgm
?????文件?????????973??2016-05-05?03:06??NeuralNetwork-master\data\faces\an2i\an2i_left_angry_sunglasses_4.pgm
?????文件???????42802??2016-05-05?03:06??NeuralNetwork-master\data\faces\an2i\an2i_left_happy_open.pgm
?????文件????????3853??2016-05-05?03:06??NeuralNetwork-master\data\faces\an2i\an2i_left_happy_open_2.pgm
?????文件?????????973??2016-05-05?03:06??NeuralNetwork-master\data\faces\an2i\an2i_left_happy_open_4.pgm
?????文件???????42944??2016-05-05?03:06??NeuralNetwork-master\data\faces\an2i\an2i_left_happy_sunglasses.pgm
?????文件????????3853??2016-05-05?03:06??NeuralNetwork-master\data\faces\an2i\an2i_left_happy_sunglasses_2.pgm
?????文件?????????973??2016-05-05?03:06??NeuralNetwork-master\data\faces\an2i\an2i_left_happy_sunglasses_4.pgm
?????文件???????43292??2016-05-05?03:06??NeuralNetwork-master\data\faces\an2i\an2i_left_neutral_open.pgm
?????文件????????3853??2016-05-05?03:06??NeuralNetwork-master\data\faces\an2i\an2i_left_neutral_open_2.pgm
?????文件?????????973??2016-05-05?03:06??NeuralNetwork-master\data\faces\an2i\an2i_left_neutral_open_4.pgm
?????文件???????42974??2016-05-05?03:06??NeuralNetwork-master\data\faces\an2i\an2i_left_neutral_sunglasses.pgm
?????文件????????3853??2016-05-05?03:06??NeuralNetwork-master\data\faces\an2i\an2i_left_neutral_sunglasses_2.pgm
?????文件?????????973??2016-05-05?03:06??NeuralNetwork-master\data\faces\an2i\an2i_left_neutral_sunglasses_4.pgm
?????文件???????42693??2016-05-05?03:06??NeuralNetwork-master\data\faces\an2i\an2i_left_sad_open.pgm
?????文件????????3853??2016-05-05?03:06??NeuralNetwork-master\data\faces\an2i\an2i_left_sad_open_2.pgm
?????文件?????????973??2016-05-05?03:06??NeuralNetwork-master\data\faces\an2i\an2i_left_sad_open_4.pgm
?????文件???????42967??2016-05-05?03:06??NeuralNetwork-master\data\faces\an2i\an2i_left_sad_sunglasses.pgm
............此處省略1896個文件信息
評論
共有 條評論