bp算法两层神经网络,33个节点,得到cosx的结果
时间: 2024-02-16 08:11:42 浏览: 17
好的,这是一个使用BP算法的两层神经网络,由33个节点组成,用于拟合cos函数的结果:
```matlab
% 生成数据
x = 0:0.1:2*pi;
y = cos(x);
% 设置参数
inputSize = 1;
hiddenSize = 33;
outputSize = 1;
learningRate = 0.1;
epochs = 5000;
% 初始化权重和偏置
W1 = randn(hiddenSize,inputSize);
b1 = randn(hiddenSize,1);
W2 = randn(outputSize,hiddenSize);
b2 = randn(outputSize,1);
% 训练模型
for i = 1:epochs
% 前向传播
z1 = W1*x + b1;
a1 = tanh(z1);
z2 = W2*a1 + b2;
y_pred = z2;
% 计算损失
loss = sum((y_pred-y).^2)/length(y);
% 反向传播
delta2 = 2*(y_pred-y);
delta1 = (W2'*delta2).*(1-a1.^2);
% 更新权重和偏置
W2 = W2 - learningRate*delta2*a1';
b2 = b2 - learningRate*sum(delta2,2);
W1 = W1 - learningRate*delta1*x';
b1 = b1 - learningRate*sum(delta1,2);
% 打印损失
if mod(i,1000) == 0
fprintf('Epoch %d, Loss %f\n',i,loss);
end
end
% 测试模型
x_test = 0:0.01:2*pi;
y_test = cos(x_test);
z1_test = W1*x_test + b1;
a1_test = tanh(z1_test);
z2_test = W2*a1_test + b2;
y_pred_test = z2_test;
fprintf('测试集均方误差: %f\n',sum((y_pred_test-y_test).^2)/length(y_test));
% 绘制结果
figure;
hold on;
plot(x,y,'b');
plot(x_test,y_pred_test,'r');
title('cos函数拟合结果');
legend('原始函数','拟合函数');
```
运行上述代码后,你会得到一个经过训练的神经网络,可以拟合cos函数的结果。同时,你也可以尝试更改参数和数据,来进一步了解BP神经网络的应用。