资源简介

matlab 手动搭建一个单隐层神经网络用于识别手写数字,实现:标准化数据集,计算损失函数,梯度下降法,反向传播,加深对神经网络的理解。

资源截图

代码片段和文件信息

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 Networks\CostFunction.m

     文件       2753  2018-01-20 23:21  Neural Networks\CostFunctionEx.m

     文件   18453870  2017-12-21 09:52  Neural Networks\datas\Data.mat

     文件    7511764  2017-12-21 09:52  Neural Networks\datas\MNIST.mat

     文件       3727  2017-12-21 09:52  Neural Networks\fmin_theta.m

     文件       1540  2018-01-20 23:23  Neural Networks\main.m

     文件        943  2018-01-20 23:01  Neural Networks\mainEx.m

     文件       2942  2017-12-21 09:52  Neural Networks\my-image\2.jpeg

     文件       3226  2017-12-21 09:52  Neural Networks\my-image\5.jpeg

     文件       2079  2017-12-21 09:52  Neural Networks\my-image\7.jpeg

     文件        646  2017-12-21 09:52  Neural Networks\num2test.m

     文件        423  2017-12-21 09:59  Neural Networks\online_test.m

     文件        793  2017-12-21 09:52  Neural Networks\plotnumData.m

     文件        585  2017-12-21 09:52  Neural Networks\predict.m

     文件        114  2018-01-18 21:06  Neural Networks\randWeights.m

     文件        183  2018-01-18 21:12  Neural Networks\randWeightsEx.m

     文件         56  2017-12-21 09:52  Neural Networks\sigmoid.m

     文件         92  2017-12-21 09:52  Neural Networks\sigmoidGradient.m

     目录          0  2017-12-21 09:52  Neural Networks\datas

     目录          0  2017-12-21 09:52  Neural Networks\my-image

     目录          0  2018-01-20 23:30  Neural Networks

----------- ---------  ---------- -----  ----

             25995292                    22


评论

共有 条评论