用matlab编写一个由一个函数表示的BP神经网络代码
时间: 2024-05-07 09:19:39 浏览: 12
以下是一个简单的 MATLAB BP 神经网络的实现示例:
```matlab
% 设定训练数据
x = [0 0; 0 1; 1 0; 1 1];
y = [0; 1; 1; 0];
% 设定神经网络参数
inputLayerSize = 2;
hiddenLayerSize = 10;
outputLayerSize = 1;
% 初始化权重矩阵
W1 = rand(inputLayerSize, hiddenLayerSize);
W2 = rand(hiddenLayerSize, outputLayerSize);
% 设定学习率和最大迭代次数
learningRate = 0.5;
maxIter = 10000;
% 开始训练
for iter = 1:maxIter
% 前向传播计算输出
z2 = x * W1;
a2 = sigmoid(z2);
z3 = a2 * W2;
yPred = sigmoid(z3);
% 计算误差和梯度
error = yPred - y;
delta3 = error .* sigmoidGradient(z3);
delta2 = delta3 * W2' .* sigmoidGradient(z2);
% 更新权重矩阵
W2 = W2 - learningRate * a2' * delta3;
W1 = W1 - learningRate * x' * delta2;
% 计算当前损失函数值
loss = sum(sum(-y .* log(yPred) - (1 - y) .* log(1 - yPred)));
% 输出当前迭代次数和损失函数值
fprintf('Iter %d, Loss = %f\n', iter, loss);
end
% 预测新数据
newX = [1 1; 0 0];
newZ2 = newX * W1;
newA2 = sigmoid(newZ2);
newZ3 = newA2 * W2;
newYPred = sigmoid(newZ3);
disp(newYPred);
```
其中,`sigmoid` 函数和 `sigmoidGradient` 函数的实现如下:
```matlab
function y = sigmoid(x)
y = 1 ./ (1 + exp(-x));
end
function y = sigmoidGradient(x)
y = sigmoid(x) .* (1 - sigmoid(x));
end
```
该 BP 神经网络使用了一个具有 2 个输入节点、10 个隐藏节点和 1 个输出节点的三层结构。将训练数据 `x` 和 `y` 设定好后,通过随机初始化权重矩阵 `W1` 和 `W2` 开始进行训练。在每次迭代中,计算当前输出和误差,然后根据误差和梯度更新权重矩阵,同时计算当前损失函数值并输出。最终,使用训练好的神经网络预测新数据 `newX` 的输出。