神经网络两个输入,三层神经网络matlab代码
时间: 2023-11-05 07:50:58 浏览: 49
以下是一个简单的三层神经网络(包括一个输入层、一个隐藏层和一个输出层)的 MATLAB 代码示例:
```matlab
% 神经网络参数
input_layer_size = 2; % 输入层维度
hidden_layer_size = 3; % 隐藏层维度
output_layer_size = 1; % 输出层维度
% 随机初始化权重参数
theta1 = rand(hidden_layer_size, input_layer_size + 1) * 0.01;
theta2 = rand(output_layer_size, hidden_layer_size + 1) * 0.01;
% 训练数据
X = [0 0; 0 1; 1 0; 1 1]; % 输入数据
y = [0; 1; 1; 0]; % 输出数据
% 添加偏置项
X = [ones(size(X, 1), 1) X];
% 前向传播
a1 = X;
z2 = a1 * theta1';
a2 = sigmoid(z2);
a2 = [ones(size(a2, 1), 1) a2];
z3 = a2 * theta2';
a3 = sigmoid(z3);
h = a3;
% 损失函数
J = sum(-y .* log(h) - (1 - y) .* log(1 - h)) / size(X, 1);
% 反向传播
delta3 = h - y;
delta2 = delta3 * theta2(:, 2:end) .* sigmoidGradient(z2);
Delta2 = delta3' * a2;
Delta1 = delta2' * a1;
% 计算梯度
Theta2_grad = Delta2 / size(X, 1);
Theta1_grad = Delta1 / size(X, 1);
% 梯度检查(可选)
% ...
% 梯度下降
alpha = 0.1; % 学习率
lambda = 0; % 正则化参数
theta1(:, 1) = 0;
theta2(:, 1) = 0;
theta1 = theta1 - alpha * (Theta1_grad + lambda * theta1) ;
theta2 = theta2 - alpha * (Theta2_grad + lambda * theta2) ;
```
其中,`sigmoid` 和 `sigmoidGradient` 函数用于计算 sigmoid 函数和其导数,代码如下:
```matlab
function g = sigmoid(z)
% 计算 sigmoid 函数
g = 1 ./ (1 + exp(-z));
end
function g = sigmoidGradient(z)
% 计算 sigmoid 函数的导数
g = sigmoid(z) .* (1 - sigmoid(z));
end
```
阅读全文