1.加载数据集
% 加载数据集
images = loadMNISTImages('minist_dataset/train-images.idx3-ubyte');
labels = loadMNISTLabels('minist_dataset/train-labels.idx1-ubyte');
numTrain = 100;
% 训练集
data_Xtrain = images(:,1:numTrain);
data_Ytrain = labels(1:numTrain,1)';
% 测试集
data_Xtest = images(:,numTrain+1:end);
data_Ytest = labels(numTrain+1:end,1)';
clear images labels %清除变量,节省内存
%由于系统会优化掉整行全是0的维度,所以对整行全是0的维度首列添加一个趋近于0的数,避免优化
data_Xtrain(~any(data_Xtrain,2),1) = 0.0000001;
data_Xtest(~any(data_Xtest,2),1) = 0.0000001;
2.构建神经网络并训练测试
% 开始构建BP网络
net = feedforwardnet([3, 4]); %两个隐含层,分别有3个和4个神经元
net.trainParam.epochs = 1000; % 最大迭代次数
net.trainParam.lr = 0.0001; % 学习率
net.trainParam.goal = 0.0001; %训练目标最小误差
net.layers{1}.transferFcn='tansig'