王权富贵:使用numpy构建简单BP神经网络(仅网络部分)--《Python神经网络编程》的学习笔记

笔记汇总:https://blog.csdn.net/a1103688841/article/details/84350432

感谢:《Python神经网络编程》--塔里克·拉希德著

https://github.com/makeyourownneuralnetwork/makeyourownneuralnetwork/blob/master/part2_neural_network.ipynb

# -*- coding: UTF-8 -*-
import numpy as np
import scipy.special
class neuralNetwork:
    def __init__(self,inputnodes,hiddennodes,outputnodes,learningrate,weit_simple=True):
        #basis value initialize
        self.inodes=inputnodes
        self.hnodes=hiddennodes
        self.onodes=outputnodes
        self.lr=learningrate
        #weit value initialize
        if(weit_simple):
            self.wih=(np.random.rand(self.hnodes,self.inodes)-0.5)
            self.who=(np.random.rand(self.onodes,self.hnodes)-0.5)
        else:
            self.wih=np.random.normal(0.0,pow(self.hnodes,-0.5),(self.hnodes,self.inodes))
            self.who=np.random.normal(0.0, pow(self.onodes, -0.5), (self.onodes, self.hnodes))
        #activation function initialize
        #这里不能随意修改函数,因为下面训练函数中的激活函数导数是直接固定的。
        self.activaltion_function=lambda x:scipy.special.expit(x)
        pass
    def train(self,inputs_list,targets_list):
        inputs=np.array(inputs_list,ndmin=2).T
        targets=np.array(targets_list,ndmin=2).T
        hidden_inputs=np.dot(self.wih,inputs)
        hidden_outputs=self.activaltion_function(hidden_inputs)
        final_inputs=np.dot(self.who,hidden_outputs)
        final_outputs=self.activaltion_function(final_inputs)
        output_errors=targets-final_outputs
        hidden_errors=np.dot(self.who.T,output_errors)
        #这里使用的反向传播用的是S型函数的公式
        self.who+=self.lr*np.dot((output_errors*final_outputs*(1.0-final_outputs)),np.transpose(hidden_outputs))
        self.wih += self.lr * np.dot((hidden_errors * hidden_outputs * (1.0 - hidden_outputs)),np.transpose(inputs))
        pass
    def query(self,inputs_list):
        inputs=np.array(inputs_list,ndmin=2).T
        hidden_inputs=np.dot(self.wih,inputs)
        hidden_outputs=self.activaltion_function(hidden_inputs)
        final_inputs=np.dot(self.who,hidden_outputs)
        final_outputs=self.activaltion_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)

猜你喜欢

转载自blog.csdn.net/a1103688841/article/details/85145456
今日推荐