BP神经网络其信号是前向传播的,而在其计算其误差时是反向传播的。
本练习小节是执行反向传播算法并且将其应用到手写数字的识别当中。
1、神经网路
在前面的训练中,可以根据提供了权重值来预测手写数字。在本练习中将使用反向传播算法来为神经网络学习权重参数。
(1)数据的可视化
load('ex4data1.mat');
m = size(X, 1);
% Randomly select 100 data points to display
sel = randperm(size(X, 1));
sel = sel(1:100);
displayData(X(sel, :));
导入手写字体数字,可以得到矩形X和矢量y,其中矩阵X的维度为5000×400,其中5000表示为5000个样本,400表示为每个样本的像素为20×20,矢量y为X中每个样本对应的标签值(y = 1-10)。
m = size(X, 1)为样本的个数;
sel = randperm(size(X, 1))将数据1-m随机进行排序,返回为矢量;
sel = sel(1:100)选取随机序列中的前100的值;
displayData(X(sel, ?)显示样本中第sel个样本图像。
(2)神经网络模型
本小节使用的神经网络如下:
input_layer_size = 400; % 20x20 Input Images of Digits
hidden_layer_size = 25; % 25 hidden units
num_labels = 10; % 10 labels, from 1 to 10
% (note that we have mapped "0" to label 10)
由于每个样本有400个特征参数,则神经网路的输入层神经个数为400,其输入分类为10个,则设置其输出神经个数为10。
设置其隐藏层神经元个数为25。
(3)损失函数
在没有进行正则化前,神经网络的损失函数为:
function [J grad] = nnCostFunction(nn_params, .