Python神经网络搭建(1)

    科技2026-01-16  9

    几乎可进行任何任务的神经网络

    1、首先导入numpy库和scipy库

    scipy.special里调用自激活函数

    import numpy import scipy.special

    2、初始化网络

    设置输入层节点、隐藏层节点和输出层节点的数量及学习率 利用lambda创建匿名函数

    class neuralNetwork : def __init__(self, inputnodes, hiddennodes, outputnodes, learningrate): self.inodes = inputnodes self.hnodes = hiddennodes self.onodes = outputnodes self.lr = learningrate self.activation_function = lambda x:scipy.special.expit(x) pass

    3、权重部分

    网络中最重要的部分,可利用权重计算前馈信号、反向传播误差,并且在试图改进网络时优化链接权重本身

    self.wih = numpy.random.normal(0.0, pow(self.hnodes, -0.5), (self.hnodes, self.inodes)) self.who = numpy.random.normal(0.0, pow(self.onodes, -0.5), (self.onodes, self.hnodes))

    4、训练网络

    针对给定的训练样本计算输出,并将计算机得到的输出与所需输出作差,进一步指导网络权重的更新

    def train(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) # 输入层点乘wih权重 hidden_outputs = self.activation_function(hidden_inputs) # S函数接受信号 final_inputs = numpy.dot(self.who, hidden_outputs) final_outputs = self.activation_function(final_inputs) output_errors = targets - final_outputs0 hidden_errors = numpy.dot(self.who, 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

    5、查询网络

    接收神经网络的输入,返回网络的输出 这时候就用到我们在初始化阶段创建的匿名函数了

    def query(self, inputs_list): inputs = numpy.array(inputs_list, ndmin = 2).T # 转化输入类型 hidden_inputs = numpy.dot(self.wih, inputs) # 更新后权重点乘输入层-隐藏层 hidden_outputs = self.activation_function(hidden_inputs) # S函数获取隐藏层信号 final_inputs = numpy.dot(self.who, hidden_outputs) # final_outputs = self.activation_function(final_inputs) # return final_outputs 以上代码可用于创建、训练和查询三层神经网络,几乎可以进行任何任务。 如果想进一步扩大神经网络的规模,可以把权重部分写的更细致一点。

    大家加油!

    Processed: 0.020, SQL: 9