请用matlab生成一段BP神经网络代码
时间: 2023-07-09 08:12:09 浏览: 95
好的,以下是一个简单的 BP 神经网络的 Matlab 示例代码,用于解决二分类问题:
```matlab
% 数据准备
X = [0, 0, 1, 1; 0, 1, 0, 1]; % 输入数据
Y = [0, 1, 1, 0]; % 输出数据
n = size(X, 2); % 输入层节点数
m = 4; % 隐含层节点数
k = 1; % 输出层节点数
% 初始化网络参数
W1 = rand(m, n) - 0.5; % 隐含层权重矩阵
b1 = rand(m, 1) - 0.5; % 隐含层偏置向量
W2 = rand(k, m) - 0.5; % 输出层权重矩阵
b2 = rand(k, 1) - 0.5; % 输出层偏置向量
alpha = 0.1; % 学习率
max_epoch = 10000; % 最大迭代次数
% 训练网络
for i = 1:max_epoch
% 正向传播
a1 = X; % 输入层输出
z2 = W1 * a1 + b1; % 隐含层加权和
a2 = sigmoid(z2); % 隐含层输出
z3 = W2 * a2 + b2; % 输出层加权和
a3 = sigmoid(z3); % 输出层输出
% 计算误差
delta3 = a3 - Y; % 输出层误差
delta2 = (W2' * delta3) .* sigmoid_derivative(z2); % 隐含层误差
% 反向传播
W2 = W2 - alpha * delta3 * a2'; % 更新输出层权重
b2 = b2 - alpha * delta3; % 更新输出层偏置
W1 = W1 - alpha * delta2 * a1'; % 更新隐含层权重
b1 = b1 - alpha * delta2; % 更新隐含层偏置
% 计算损失函数
J(i) = sum((a3 - Y).^2) / 2;
end
% 测试网络
X_test = [0.1, 0.9; 0.8, 0.2]; % 测试数据
a1_test = X_test; % 输入层输出
z2_test = W1 * a1_test + b1; % 隐含层加权和
a2_test = sigmoid(z2_test); % 隐含层输出
z3_test = W2 * a2_test + b2; % 输出层加权和
a3_test = sigmoid(z3_test); % 输出层输出
disp(a3_test); % 输出预测结果
```
请注意,这只是一个简单的 BP 神经网络示例,实际应用中需要根据具体问题进行调整和优化。
阅读全文