python bp神经网络代码实现预测,用Python实现BP神经网络(附代码)

本文详细介绍了如何使用Python实现BP神经网络,包括三层神经网络结构、代价函数、正则化、反向传播算法和梯度检查。通过实例代码展示了权重初始化、预测函数的实现,并提供了完整代码链接。
摘要由CSDN通过智能技术生成

用Python实现出来的机器学习算法都是什么样子呢? 前两期线性回归及逻辑回归项目已发布(见文末链接),今天来讲讲BP神经网络。

BP神经网络

全部代码

https://github.com/lawlite19/MachineLearning_Python/blob/master/NeuralNetwok/NeuralNetwork.py

神经网络model

先介绍个三层的神经网络,如下图所示

输入层(input layer)有三个units(

adb64ef01a4aaea9a265e7973178c4b7.png

为补上的bias,通常设为1)

8735589089a6fa795b0dae48aff8031a.png

表示第j层的第i个激励,也称为为单元unit

ee17e2711e9150b7341ebfb52f5490dd.png

为第j层到第j+1层映射的权重矩阵,就是每条边的权重

25150d2c2d265bda67a309f4d131407c.png

所以可以得到:

隐含层:

5e66c248fcc126952e2bddef5a98a658.png

f5a5a99878adc37162af89f6ffff3582.png

b6419fea71e58d569121b1a821b7fa96.png

输出层

72102a2a7282ec49fd51e7407e40f024.png

其中,S型函数

88e4fb88acb963899e7b33e8550f5d1f.png

,也成为激励函数

可以看出

68b01e070903f559b9ed847e1f50a76f.png

为3x4的矩阵,

5975cf091c125fd7dcaa40c6625b9c05.png

为1x4的矩阵

ee17e2711e9150b7341ebfb52f5490dd.png

==》j+1的单元数x(j层的单元数+1)

代价函数

假设最后输出的

82477b7fb165d742759a4f05c0e1ceed.png

,即代表输出层有K个单元

b1a6676407d8d3c11bedf41eddc9ff00.png

其中,

2b2e4e2d82cee04097d65d1a0bd941ac.png

代表第i个单元输出与逻辑回归的代价函数

6d0341bc93796a83744d7aabb16f44a7.png

差不多,就是累加上每个输出(共有K个输出)

正则化

L-->所有层的个数<

  • 2
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于PythonBP神经网络分类预测示例代码,你可以根据自己的需要进行修改和调整: ```python import numpy as np # 定义sigmoid激活函数 def sigmoid(x): return 1 / (1 + np.exp(-x)) # 定义softmax激活函数 def softmax(x): exp_x = np.exp(x) return exp_x / np.sum(exp_x, axis=0) # 定义BP神经网络类 class BPNeuralNetwork: def __init__(self, input_nodes, hidden_nodes, output_nodes, learning_rate): # 初始化网络参数 self.input_nodes = input_nodes self.hidden_nodes = hidden_nodes self.output_nodes = output_nodes self.learning_rate = learning_rate # 初始化权重 self.weights_input_hidden = np.random.normal(0.0, self.input_nodes ** -0.5, (self.input_nodes, self.hidden_nodes)) self.weights_hidden_output = np.random.normal(0.0, self.hidden_nodes ** -0.5, (self.hidden_nodes, self.output_nodes)) # 训练网络 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.weights_input_hidden.T, inputs) hidden_outputs = sigmoid(hidden_inputs) final_inputs = np.dot(self.weights_hidden_output.T, hidden_outputs) final_outputs = softmax(final_inputs) # 计算误差 output_errors = targets - final_outputs hidden_errors = np.dot(self.weights_hidden_output, output_errors) * hidden_outputs * (1 - hidden_outputs) # 更新权重 self.weights_hidden_output += self.learning_rate * np.dot(hidden_outputs, output_errors.T) self.weights_input_hidden += self.learning_rate * np.dot(hidden_errors, inputs.T) # 查询网络 def query(self, inputs_list): # 转换输入列表为二维数组 inputs = np.array(inputs_list, ndmin=2).T # 前向传播 hidden_inputs = np.dot(self.weights_input_hidden.T, inputs) hidden_outputs = sigmoid(hidden_inputs) final_inputs = np.dot(self.weights_hidden_output.T, hidden_outputs) final_outputs = softmax(final_inputs) return final_outputs ``` 这是一个简单的BP神经网络分类预测实现,你可以通过调整参数和增加层数等方式来优化模型性能。在此示例中,我们使用了softmax激活函数来输出类别的概率分布,因为它适用于多分类问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值