元洁的python之神经网络学习(一)

本文介绍了一个用Python实现的神经网络模型,包括初始化、训练和查询功能。通过使用numpy和scipy库,文章详细展示了神经网络的搭建过程,包括权重初始化、前向传播、误差反向传播及权重更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

元洁的python之神经网络学习(一)

 #!/user/bin/env python
import numpy
import scipy.special

class neuralNetwork:
    
    def __init__(self, inputnodes, hiddennodes, outputnodes, learningrate):
        """
        初始化函数:初始化神经网络相关数据
        """
     
        # 输入节点、隐藏层节点、输出节点
        self.inodes = inputnodes
        self.hnodes = hiddennodes
        self.onodes = outputnodes
        
        # 学习率
        self.lr = learningrate
        
        # 权重矩阵 (初始值应该较小,并且是随机的)
        #self.wih=(numpy.random.rand(self.hnodes ,self.inodes)-0.5)
        #self.who=(numpy.random.rand(self.onodes ,self.hnodes)-0.5)
        
        # 正态概率分布初始化权重
        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))
        
        # 神经网络激活函数sigmoid
        self.activation_function = lambda x:scipy.special.expit(x)
        
        pass
    
    def train(self, inputs_lists, targets_list):
        
        # 第一部分:针对给定的训练样本计算输出
        inputs = numpy.array(inputs_lists, 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)
        
        # 计算所得输出与目标值对比,使用差值来指导网络权重的更新
        output_errors = targets - final_outputs
        hidden_errors = numpy.dot(self.who.T, output_errors)
        input_errors = numpy.dot(self.wih.T, hidden_errors)
        
        # 隐藏层与输出层之间的权重更新
        self.who = self.who + self.lr * numpy.dot(output_errors * final_outputs * (1.0 - final_outputs),
                                                  numpy.transpose(hidden_outputs))
        self.wih = self.wih + self.lr * numpy.dot(hidden_errors * hidden_outputs * (1.0 - hidden_outputs),
                                                  numpy.transpose(inputs))
        
        pass
    
    
    
    def query(self, inputs_lists):
        """ 
        该函数的作用:计算神经网络的输出
        """
        
        # 输入:输入的列表,转换为维度为2的数组后,再进行转置
        inputs = numpy.array(inputs_lists, 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)
        
        return final_outputs
        pass
    
    pass


input_nodes = 3
hidden_nodes = 3
output_nodes = 3

learning_rate = 0.3

n=neuralNetwork(input_nodes, hidden_nodes, output_nodes, learning_rate)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值