【神经网络】简单入门(一)

引言

推荐阅读《Python神经网络编程》[英]Taniq Rashid 著

非常的简单易懂,对数学知识讲解的很细致,完全不用担心看不懂

下文的代码也是取自书中

构建神经网络

下文仅构建了一个3层神经网络,并简单的对模型进行了一次训练

import numpy

import scipy.special #为了使用包内的激活函数

#构建3层的神经网络
class neuralNetwork: 
    # 初始化 所需参数:输入层节点数、隐藏层节点数、输出层节点数、学习效率
    def __init__(self, inputnodes, hiddennodes, outputnodes, learningrate):
        self.inodes = inputnodes
        self.hnodes = hiddennodes
        self.onodes = outputnodes
        

        #按照正态分布随机生成权重矩阵
        #pow(x,y)=x^y
        #normal(分布中心值,标准方差,数组大小)
        self.wih = numpy.random.normal(0.0, pow(self.inodes, -0.5), (self.hnodes, self.inodes))
        self.who = numpy.random.normal(0.0, pow(self.hnodes, -0.5), (self.onodes, self.hnodes))

        #学习效率
        self.lr = learningrate
        
        #激活函数
        self.activation_function = lambda x: scipy.special.expit(x)
        
        pass

    
    # 训练神经网络
    def train(self, inputs_list, targets_list):
        # 转换为二维数组,并进行转置
        inputs = numpy.array(inputs_list, ndmin=2).T
        targets = numpy.array(targets_list, ndmin=2).T
        
        # 矩阵内积计算隐藏层输入值
        # dot()矩阵内积/点乘
        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)
        
        # 计算误差
        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

if __name__ == "__main__":
    input_nodes = 3   #输入层节点数
    hidden_nodes = 3  #隐藏层节点数
    output_nodes = 3  #输出层节点数
    learning_rate = 0.3 #学习效率

    n = neuralNetwork(input_nodes,hidden_nodes,output_nodes, learning_rate)

    inputList=[1,3,5]
    targetList=[4,7,11]
    n.train(inputList,targetList)

 

上一篇:Pytorch的LSTM的理解


下一篇:torch 迁移学习 蜜蜂蚂蚁 BeeAndAnt