0

链接到包含所有代码的 github 页面

抱歉,这是在黑暗中拍摄的。几个月来,我一直试图让这个 MATLAB 感知器对虹膜数据集进行分类。我试过改变超参数、激活函数、不同形式的梯度下降、初始化、梯度检查和许多其他东西,但我无法让它工作。如果有人能给我任何关于它为什么不起作用的线索,将不胜感激。

%% Define Hyperparameters
% This will be a 4 layer neural network, with two hidden layers

inputLayerSize = 4; % representing the 4 features 
outputLayerSize = 3; % representing the 3 kinds of iris
hiddenLayer1Size = 6;
hiddenLayer2Size = 5;


%% Randomly Initialize Weights and Biases

W12 = rand(hiddenLayer1Size, inputLayerSize);
b12 = rand(hiddenLayer1Size, 1);
W23 = rand(hiddenLayer2Size, hiddenLayer1Size);
b23 = rand(hiddenLayer2Size, 1);
W34 = rand(outputLayerSize, hiddenLayer2Size);
b34 = rand(outputLayerSize, 1);

%% Number of iterations of training 
for i = 1 : 100

%% Randomly Select Training Example
% Because this neural network is trained using Stochastic gradient descent
% the network is trained using only one example

[~,s] = size(X_train);
n = randi(s);
Xone = X_train(:,n);
Yone = Y_train(:,n);

%% Forward Propagation

[Yout, a3, a2, z4, z3, z2] = ForwardProp( Xone, W12, b12, W23, b23, W34, b34 );

%% Back Propagation

[del4, del3, del2] = Backprop(Yout, Yone, z4, z3, z2, W34, W23);

%% Update Weights and bias

nu = 0.1; %learning rate

W34 = W34 - nu * (del4*a3');
b34 = b34 - nu * del4;

W23 = W23 - nu * (del3*a2');
b23 = b23 - nu * del3;

W12 = W12 - nu * (del2*Xone');
b12 = b12 - nu * del2;


%% Check Accuracy
if rem(i, 10) == 0
[ Ycheck, a3, a2, z4, z3, z2 ] = ForwardProp( X_test, W12, b12, W23, b23, W34, b34 );
AccuracyCheck(Ycheck, Y_test)

end 
end
4

0 回答 0