编写一个多层感知机的matlab代码
时间: 2024-04-05 07:03:48 浏览: 65
perception_感知机_matlab_perception_
下面是一个简单的多层感知机的 MATLAB 代码示例:
```matlab
% 准备训练数据
X = [0 0; 0 1; 1 0; 1 1]; % 输入数据
Y = [0; 1; 1; 0]; % 输出数据
% 定义神经网络的参数
inputSize = size(X, 2); % 输入层节点数
hiddenSize = 4; % 隐藏层节点数
outputSize = 1; % 输出层节点数
learningRate = 0.1; % 学习率
epochs = 10000; % 迭代次数
% 初始化权重和偏置
W1 = randn(inputSize, hiddenSize); % 输入层到隐藏层的权重
b1 = zeros(1, hiddenSize); % 隐藏层的偏置
W2 = randn(hiddenSize, outputSize); % 隐藏层到输出层的权重
b2 = zeros(1, outputSize); % 输出层的偏置
% 开始训练
for epoch = 1:epochs
% 前向传播
hiddenLayerOutput = sigmoid(X * W1 + b1); % 隐藏层输出
predictedOutput = sigmoid(hiddenLayerOutput * W2 + b2); % 输出层输出
% 计算损失函数(均方误差)
loss = sum((predictedOutput - Y).^2) / size(X, 1);
% 反向传播
deltaOutput = (predictedOutput - Y) .* sigmoidDerivative(predictedOutput); % 输出层的误差
deltaHidden = (deltaOutput * W2') .* sigmoidDerivative(hiddenLayerOutput); % 隐藏层的误差
% 更新权重和偏置
W2 = W2 - learningRate * hiddenLayerOutput' * deltaOutput;
b2 = b2 - learningRate * sum(deltaOutput);
W1 = W1 - learningRate * X' * deltaHidden;
b1 = b1 - learningRate * sum(deltaHidden);
end
% 预测
predictedOutput = sigmoid(sigmoid(X * W1 + b1) * W2 + b2);
disp(predictedOutput);
% 定义 sigmoid 函数
function y = sigmoid(x)
y = 1 ./ (1 + exp(-x));
end
% 定义 sigmoid 函数的导数
function y = sigmoidDerivative(x)
y = sigmoid(x) .* (1 - sigmoid(x));
end
```
这段代码实现了一个简单的多层感知机,用于解决 XOR 逻辑门的问题。它包括前向传播、损失函数计算、反向传播和参数更新等步骤。在训练过程中,神经网络通过最小化损失函数逐渐调整权重和偏置,以提高预测准确性。最后,使用训练好的模型进行预测。注意,这只是一个简单的示例,实际应用中可能需要更复杂的模型和调整参数。
阅读全文