写一段matlab可用BP神经网络代码,带注释
时间: 2023-11-02 10:32:41 浏览: 88
基于BP神经网络的图像压缩解压缩算法matlab性能仿真,包含仿真操作录像,代码注释
5星 · 资源好评率100%
以下是一个简单的BP神经网络的Matlab代码,可以实现二分类任务,其中包括了注释以方便理解。
% 生成训练数据
x = [0 0 1 1; 0 1 0 1]; % 输入数据
y = [0 1 1 0]; % 目标输出
% 设置网络参数
inputSize = size(x, 1); % 输入层大小
hiddenSize = 3; % 隐藏层大小
outputSize = 1; % 输出层大小
learningRate = 0.1; % 学习率
maxEpochs = 10000; % 最大迭代次数
% 初始化网络权重和偏置
W1 = rand(hiddenSize, inputSize); % 输入层到隐藏层的权重
b1 = rand(hiddenSize, 1); % 隐藏层偏置
W2 = rand(outputSize, hiddenSize); % 隐藏层到输出层的权重
b2 = rand(outputSize, 1); % 输出层偏置
% BP神经网络训练
for epoch = 1:maxEpochs
% 前向传播
z1 = W1 * x + b1; % 隐藏层输入
a1 = 1 ./ (1 + exp(-z1)); % 隐藏层输出(sigmoid函数)
z2 = W2 * a1 + b2; % 输出层输入
y_pred = 1 ./ (1 + exp(-z2)); % 输出层输出(sigmoid函数)
% 计算损失函数
loss = sum((y - y_pred) .^ 2) / size(y, 2);
% 反向传播
delta2 = (y_pred - y) .* y_pred .* (1 - y_pred); % 输出层误差
delta1 = (W2' * delta2) .* a1 .* (1 - a1); % 隐藏层误差
% 更新权重和偏置
W2 = W2 - learningRate * delta2 * a1'; % 隐藏层到输出层的权重更新
b2 = b2 - learningRate * sum(delta2, 2); % 输出层偏置更新
W1 = W1 - learningRate * delta1 * x'; % 输入层到隐藏层的权重更新
b1 = b1 - learningRate * sum(delta1, 2); % 隐藏层偏置更新
% 打印训练过程
if mod(epoch, 1000) == 0
fprintf('Epoch %d: loss = %.4f\n', epoch, loss);
end
% 停止准则:当损失函数小于某个阈值时停止训练
if loss < 0.01
break;
end
end
% 测试模型
x_test = [0 1; 1 1; 1 0; 0 0]'; % 测试数据
z1_test = W1 * x_test + b1; % 隐藏层输入
a1_test = 1 ./ (1 + exp(-z1_test)); % 隐藏层输出
z2_test = W2 * a1_test + b2; % 输出层输入
y_pred_test = 1 ./ (1 + exp(-z2_test)); % 输出层输出
fprintf('Test result: %.2f %.2f %.2f %.2f\n', y_pred_test); % 打印测试结果
阅读全文