bp神经网络matlab实例
时间: 2023-08-31 10:09:32 浏览: 75
以下是一个简单的基于BP神经网络的MATLAB实例:
假设我们有一个样本集,包含了四个数据点,每个数据点有两个特征,我们的任务是根据这些特征预测数据点所属的类别。
我们可以先构建一个2-3-1的BP神经网络,其中2表示输入层的神经元数量,3表示隐藏层的神经元数量,1表示输出层的神经元数量。
首先,我们需要准备数据:
```matlab
X = [0 0; 0 1; 1 0; 1 1]; % 输入数据
Y = [0; 1; 1; 0]; % 输出数据
```
接下来,我们可以定义神经网络的结构和参数:
```matlab
input_layer_size = 2; % 输入层神经元数量
hidden_layer_size = 3; % 隐藏层神经元数量
output_layer_size = 1; % 输出层神经元数量
epsilon_init = 0.12; % 随机初始化参数的范围
% 随机初始化参数
theta1 = rand(hidden_layer_size, input_layer_size+1) * 2 * epsilon_init - epsilon_init;
theta2 = rand(output_layer_size, hidden_layer_size+1) * 2 * epsilon_init - epsilon_init;
```
接下来,我们可以定义一个代价函数来评估神经网络的性能:
```matlab
function J = costFunction(X, y, theta1, theta2)
m = size(X, 1);
J = 0;
% 前向传播计算预测值
a1 = [ones(m, 1) X];
z2 = a1 * theta1';
a2 = [ones(m, 1) sigmoid(z2)];
z3 = a2 * theta2';
hypothesis = sigmoid(z3);
% 计算代价函数
J = (1/m) * sum(sum(-y .* log(hypothesis) - (1-y) .* log(1-hypothesis)));
end
```
其中,sigmoid函数定义如下:
```matlab
function g = sigmoid(z)
g = 1.0 ./ (1.0 + exp(-z));
end
```
接下来,我们可以利用梯度下降算法来最小化代价函数:
```matlab
alpha = 0.1; % 学习率
num_iters = 10000; % 迭代次数
m = size(X, 1);
% 梯度下降迭代
for i = 1:num_iters
% 前向传播计算预测值
a1 = [ones(m, 1) X];
z2 = a1 * theta1';
a2 = [ones(m, 1) sigmoid(z2)];
z3 = a2 * theta2';
hypothesis = sigmoid(z3);
% 计算误差
delta3 = hypothesis - Y;
delta2 = (delta3 * theta2(:,2:end)) .* sigmoidGradient(z2);
% 计算梯度
Delta2 = delta3' * a2;
Delta1 = delta2' * a1;
% 更新参数
theta1 = theta1 - (alpha/m) * Delta1;
theta2 = theta2 - (alpha/m) * Delta2;
% 计算代价函数
J = costFunction(X, Y, theta1, theta2);
end
```
其中,sigmoidGradient函数定义如下:
```matlab
function g = sigmoidGradient(z)
g = sigmoid(z) .* (1 - sigmoid(z));
end
```
最后,我们可以用训练好的模型来预测新的数据点属于哪个类别:
```matlab
x_test = [0.5 0.5]; % 新的数据点
a1 = [1 x_test];
z2 = a1 * theta1';
a2 = [1 sigmoid(z2)];
z3 = a2 * theta2';
hypothesis = sigmoid(z3);
if hypothesis >= 0.5
fprintf('预测结果为1\n');
else
fprintf('预测结果为0\n');
end
```
以上就是一个简单的基于BP神经网络的MATLAB实例。
阅读全文