BP神经网络matlab代码
时间: 2023-09-15 20:23:18 浏览: 76
BP神经网络代码MATLAB
这里是一个简单的三层BP神经网络的MATLAB代码示例:
```matlab
% BP神经网络示例
% 训练数据
X = [0 0 1 1; 0 1 0 1];
Y = [0 1 1 0];
% 神经网络参数
input_layer_size = 2;
hidden_layer_size = 3;
output_layer_size = 1;
% 初始化权重和偏置
W1 = randn(hidden_layer_size, input_layer_size);
b1 = randn(hidden_layer_size, 1);
W2 = randn(output_layer_size, hidden_layer_size);
b2 = randn(output_layer_size, 1);
% 训练参数
num_iterations = 10000;
learning_rate = 0.1;
% 训练循环
for i = 1:num_iterations
% 前向传播
Z1 = W1 * X + b1;
A1 = sigmoid(Z1);
Z2 = W2 * A1 + b2;
A2 = sigmoid(Z2);
% 计算损失
cost = sum((A2 - Y).^2) / size(Y, 2);
% 反向传播
dA2 = 2 * (A2 - Y) / size(Y, 2);
dZ2 = dA2 .* sigmoid_derivative(Z2);
dW2 = dZ2 * A1';
db2 = sum(dZ2, 2);
dA1 = W2' * dZ2;
dZ1 = dA1 .* sigmoid_derivative(Z1);
dW1 = dZ1 * X';
db1 = sum(dZ1, 2);
% 更新权重和偏置
W1 = W1 - learning_rate * dW1;
b1 = b1 - learning_rate * db1;
W2 = W2 - learning_rate * dW2;
b2 = b2 - learning_rate * db2;
% 打印损失
if mod(i, 1000) == 0
fprintf('Iteration %d, cost = %f\n', i, cost);
end
end
% 预测
Z1 = W1 * X + b1;
A1 = sigmoid(Z1);
Z2 = W2 * A1 + b2;
A2 = sigmoid(Z2);
fprintf('Predictions: %s\n', mat2str(A2 > 0.5));
% sigmoid函数及其导数
function y = sigmoid(x)
y = 1 ./ (1 + exp(-x));
end
function y = sigmoid_derivative(x)
y = sigmoid(x) .* (1 - sigmoid(x));
end
```
这段代码实现了一个将两个二进制数字异或起来的三层BP神经网络。其中,`X`是训练数据,每一列包含两个二进制数字,`Y`是对应的异或结果。神经网络的结构为:输入层2个神经元,一个隐藏层3个神经元,输出层1个神经元。在训练过程中,我们使用了常见的梯度下降算法来训练神经网络。最后,我们使用训练好的神经网络对输入数据进行预测,输出结果为神经网络的二进制输出。
阅读全文