matlab 手动搭建一个单隐层神经网络用于识别手写数字,实现:标准化数据集,计算损失函数,梯度下降法,反向传播,加深对神经网络的理解。
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6148 2017-12-21 09:52 Neural Networks.DS_Store
文件 3408 2018-01-20 15:54 Neural NetworksCostFunction.m
文件 2753 2018-01-20 23:21 Neural NetworksCostFunctionEx.m
文件 18453870 2017-12-21 09:52 Neural NetworksdatasData.mat
文件 7511764 2017-12-21 09:52 Neural NetworksdatasMNIST.mat
文件 3727 2017-12-21 09:52 Neural Networksfmin_theta.m
文件 1540 2018-01-20 23:23 Neural Networksmain.m
文件 943 2018-01-20 23:01 Neural NetworksmainEx.m
文件 2942 2017-12-21 09:52 Neural Networksmy-image2.jpeg
文件 3226 2017-12-21 09:52 Neural Networksmy-image5.jpeg
文件 2079 2017-12-21 09:52 Neural Networksmy-image7.jpeg
文件 646 2017-12-21 09:52 Neural Networks
um2test.m
文件 423 2017-12-21 09:59 Neural Networksonline_test.m
文件 793 2017-12-21 09:52 Neural NetworksplotnumData.m
文件 585 2017-12-21 09:52 Neural Networkspredict.m
文件 114 2018-01-18 21:06 Neural Networks
andWeights.m
文件 183 2018-01-18 21:12 Neural Networks
andWeightsEx.m
文件 56 2017-12-21 09:52 Neural Networkssigmoid.m
文件 92 2017-12-21 09:52 Neural NetworkssigmoidGradient.m
目录 0 2017-12-21 09:52 Neural Networksdatas
目录 0 2017-12-21 09:52 Neural Networksmy-image
目录 0 2018-01-20 23:30 Neural Networks
----------- --------- ---------- ----- ----
25995292 22
function [J grad] = CostFunction(theta_params input_layer_size hidden_layer_size class_num X y lambda)
Theta_input = reshape(theta_params(1:hidden_layer_size * (input_layer_size + 1)) hidden_layer_size (input_layer_size + 1));
Theta_hidden = reshape(theta_params((1 + (hidden_layer_size * (input_layer_size + 1))):end) class_num (hidden_layer_size + 1));
m = size(X 1); % 获取样本长度
J = 0; % 初始化损失能量为0
input_grad = zeros(size(Theta_input)); % 初始化输入层参数
hidden_grad = zeros(size(Theta_hidden)); % 初始化隐藏层参数
%-----------------------------one-hot处理-----------------------------------
% 1 = [1 0 0 0 0 0 0 0 0 0]
% 2 = [0 1 0 0 0 0 0 0 0 0]
% 3 = [0 0 1 0 0 0 0 0 0 0]
% 4 = [0 0 0 1 0 0 0 0 0 0]
% 5 = [0 0 0 0 1 0 0 0 0 0]
% 6 = [0 0 0 0 0 1 0 0 0 0]
% 7 = [0 0 0 0 0 0 1 0 0 0]
% 8 = [0 0 0 0 0 0 0 1 0 0]
% 9 = [0 0 0 0 0 0 0 0 1 0]
% 0 = [0 0 0 0 0 0 0 0 0 1]
%--------------------------------------------------------------------------
Y=[];
E = eye(class_num);
for i=1:class_num
index = find(y==i);
Y(index:) = repmat(E(i:)size(index1)1);
end
%--------------------------------------------------------------------------
%--------------------------------计算前向传输--------------------------------
X = [ones(m 1) X];
hidden_return = sigmoid(X * Theta_input‘); % 第二层(隐藏层)激活函数输出
hidden_return = [ones(m 1) hidden_return]; %
output = sigmoid(hidden_return * Theta_hidden‘);% 输出层激活函数输出
temp1 = [zeros(size(Theta_input1)1) Theta_input(:2:end)]; % 常数项不参与正则化
temp2 = [zeros(size(Theta_hidden1)1) Theta_hidden(:2:end)]; % 常数项不参与正则化
temp1 = sum(temp1 .^2); temp2 = sum(temp2 .^2); % 计算每个参数的平方和
cost = Y .* log(output) + (1 - Y ) .* log( (1 - output)); % 计算损失成本函数值
J = -1 / m * sum(cost(:)) + lambda/(2*m) * ( sum(temp1(:))+ sum(temp2(:)) );
delta_1 = zeros(size(Theta_input));
delta_2 = zeros(size(Theta_hidden));
for t = 1:m
inputdata = X(t:)‘; % 获取像素值
hidden_input = Theta_input * inputdata; % 计算隐藏层输入值
hidden_output = sigmoid(hidden_input); % 计算隐藏层输出值
hidden_output = [1 ; hidden_output]; % 隐藏层增加常数项
output_input = Theta_hidden * hidden_output; % 计算输出层输入值
output_output = sigmoid(output_input); % 计算输出层输出值
err_output = zeros(class_num1); % 构建输出层误差
% for k = 1:class_num
% err_output(k) = output_output(k) - (y(t) == k); % 每类别输出层误差
% end
err_output=output_output-Y(t:)‘;
hidden_err = Theta_hidden‘ * err_output; % 隐藏层误差
hidden_err = hidden_err(2:end) .* sigmoidGradient(hidden_input); % 隐藏层误差
delta_2 = delta_2 + err_output * hidden_output‘;
delta_1 = delta_1 + hidden_err * inputdata‘;
end
Theta_input_temp = [zeros(size(Theta_input1)1) Theta_input(:2:end)];
Theta_hidden_temp = [zeros(size(Theta_hidden1)1) Theta_hidden(:2:end)];
in
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6148 2017-12-21 09:52 Neural Networks.DS_Store
文件 3408 2018-01-20 15:54 Neural NetworksCostFunction.m
文件 2753 2018-01-20 23:21 Neural NetworksCostFunctionEx.m
文件 18453870 2017-12-21 09:52 Neural NetworksdatasData.mat
文件 7511764 2017-12-21 09:52 Neural NetworksdatasMNIST.mat
文件 3727 2017-12-21 09:52 Neural Networksfmin_theta.m
文件 1540 2018-01-20 23:23 Neural Networksmain.m
文件 943 2018-01-20 23:01 Neural NetworksmainEx.m
文件 2942 2017-12-21 09:52 Neural Networksmy-image2.jpeg
文件 3226 2017-12-21 09:52 Neural Networksmy-image5.jpeg
文件 2079 2017-12-21 09:52 Neural Networksmy-image7.jpeg
文件 646 2017-12-21 09:52 Neural Networks
um2test.m
文件 423 2017-12-21 09:59 Neural Networksonline_test.m
文件 793 2017-12-21 09:52 Neural NetworksplotnumData.m
文件 585 2017-12-21 09:52 Neural Networkspredict.m
文件 114 2018-01-18 21:06 Neural Networks
andWeights.m
文件 183 2018-01-18 21:12 Neural Networks
andWeightsEx.m
文件 56 2017-12-21 09:52 Neural Networkssigmoid.m
文件 92 2017-12-21 09:52 Neural NetworkssigmoidGradient.m
目录 0 2017-12-21 09:52 Neural Networksdatas
目录 0 2017-12-21 09:52 Neural Networksmy-image
目录 0 2018-01-20 23:30 Neural Networks
----------- --------- ---------- ----- ----
25995292 22
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)