神经元,隐藏层为三个神经元。

% 定义输入和目标输出 x = [0.1; 0.2]; % 输入 y = 0.5; % 目标输出

% 定义网络参数 w1 = rand(3,2); % 输入层到隐藏层的权重 w2 = rand(1,3); % 隐藏层到输出层的权重 b1 = rand(3,1); % 隐藏层的偏置 b2 = rand(1,1); % 输出层的偏置

% 定义学习率和循环次数 alpha = 0.1; % 学习率 max_iter = 10000; % 最大循环次数

% 训练网络 for i = 1:max_iter % 前向传播 z1 = w1 * x + b1; % 隐藏层的输出 a1 = sigmoid(z1); % 隐藏层的激活值 z2 = w2 * a1 + b2; % 输出层的输出 a2 = sigmoid(z2); % 输出层的激活值

% 计算误差
delta2 = (a2 - y) .* sigmoid_derivative(z2); % 输出层的误差
delta1 = (w2' * delta2) .* sigmoid_derivative(z1); % 隐藏层的误差

% 更新参数
w2 = w2 - alpha * delta2 * a1'; % 隐藏层到输出层的权重更新
w1 = w1 - alpha * delta1 * x'; % 输入层到隐藏层的权重更新
b2 = b2 - alpha * delta2; % 输出层的偏置更新
b1 = b1 - alpha * delta1; % 隐藏层的偏置更新

% 打印训练进度
if mod(i, 1000) == 0
    fprintf('训练进度:%d/%d\n', i, max_iter);
end

end

% 测试网络 z1 = w1 * x + b1; % 隐藏层的输出 a1 = sigmoid(z1); % 隐藏层的激活值 z2 = w2 * a1 + b2; % 输出层的输出 a2 = sigmoid(z2); % 输出层的激活值 fprintf('网络输出:%f\n', a2);

% 定义sigmoid函数及其导数 function y = sigmoid(x) y = 1 ./ (1 + exp(-x)); end

function y = sigmoid_derivative(x) y = sigmoid(x) .* (1 - sigmoid(x)); end


原文地址: https://www.cveoy.top/t/topic/EOt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录