BP算法程序练习(doing)

本文档主要介绍了BP算法的结构组成,包括输入层、隐藏层和输出层的定义,并详细探讨了BP算法的核心部分,目前处于实践阶段。
摘要由CSDN通过智能技术生成

目录

一、先定义需要用到的结构

1、输入层

2、隐藏层

3、输出层

二、BP算法 (doing)


一、先定义需要用到的结构

1、输入层

#pragma once
#ifndef INPUTLAYER_H
#define INPUTLAYER_H

#include"Header.h"

class InLayer {
public:
	double bias = 1;              //偏置
	//double biasWeight;

	double inputValue;            // 训练的特征值
	std::vector<double> weight;   // 输入层单个神经元对隐藏层每个神经元的权重

};

#endif // !INPUTLAYER_H

2、隐藏层

#pragma once
#ifndef HIDDENLAYER_H
#define HIDDENLAYER_H

#include"Header.h"

class HiddenLayer {
public:
	double bias = 1;  //偏置
	//double biasWeight;

	double inputValue;   // z = sum(weight * x)
	double outputValue;  // a = sigmoid(z)
	
	std::vector<double> weight;   // 隐藏层单个神经元对下一层每个神经元的权重

	double delta = 0;        // 单个神经元的激活项误差
};

#endif // !HIDDENLAYER_H

3、输出层

#pragma once
#ifndef OUTPUTLAYER_H
#define OPUTPUTLAYER_H

class OutLayer {
public:

	double inputValue;   // z = sum(weight * x)
	double outputValue;  // a = sigmoid(z),即预测输出

	double label;        // 训练的标签

	double delta = 0;        // 单个神经元的激活项误差

};

#endif // !INPUTLAYER_H

二、BP算法 (doing)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BP算法(Back Propagation)是一种常用的人工神经网络算法,用于训练多层感知器(MLP)等神经网络模型。在MATLAB中,可以使用nntool等工具箱快速构建BP神经网络,也可以手动编写BP算法程序。以下是一个简单的BP算法程序示例: ```matlab % 准备数据集 x = [0 0 1 1; 0 1 0 1]; % 输入数据 d = [0 1 1 0]; % 目标输出 % 初始化神经网络参数 n = 2; % 输入层神经元个数 h = 4; % 隐层神经元个数 m = 1; % 输出层神经元个数 w1 = randn(h, n); % 输入层到隐层的权重 w2 = randn(m, h); % 隐层到输出层的权重 b1 = zeros(h, 1); % 隐层偏置向量 b2 = zeros(m, 1); % 输出层偏置向量 lr = 0.1; % 学习率 max_epoch = 10000; % 最大迭代次数 % BP算法训练神经网络 for epoch = 1:max_epoch % 正向传播 u1 = w1 * x + b1; y1 = 1 ./ (1 + exp(-u1)); % sigmoid激活函数 u2 = w2 * y1 + b2; y2 = 1 ./ (1 + exp(-u2)); % 反向传播 delta2 = y2 .* (1 - y2) .* (d - y2); delta1 = y1 .* (1 - y1) .* (w2' * delta2); % 更新权重和偏置 w2 = w2 + lr * delta2 * y1'; b2 = b2 + lr * delta2; w1 = w1 + lr * delta1 * x'; b1 = b1 + lr * delta1; % 检查误差是否已足够小 err = sum((d - y2).^2) / length(d); if err < 0.001 break; end end % 预测结果 y_pred = round(y2); % 四舍五入,转换为0/1输出 disp('Predicted output:'); disp(y_pred); ``` 上述代码中,首先准备了一个简单的数据集,包含四个二进制数对应的目标输出,然后初始化了一个包含一个隐层的神经网络,使用随机权重和偏置向量。接着,使用BP算法进行神经网络训练,包括正向传播、反向传播和权重更新。最后,使用训练好的神经网络进行预测,并将输出结果转换为0/1输出。 需要注意的是,上述代码中的sigmoid激活函数可以根据实际情况进行调整,还可以使用其他激活函数,如ReLU、tanh等。此外,学习率lr和最大迭代次数max_epoch也可以根据具体问题进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值