Untitled

 avatar
unknown
plain_text
5 months ago
2.3 kB
6
Indexable
% Load data
load IRIS_IN.csv; % Input data
load IRIS_OUT.csv; % Target output
input = IRIS_IN;
target = IRIS_OUT;

% Initialize weights
WeightIn = 2 * rand(4, 10) - 1 ;  % Weights from input to hidden layer
WeightHidden = 2 * rand(10, 1) - 1;  % Weights from hidden to output layer

% Parameters
epoch = 100;
trainDataSize = 75;
testDataSize = 75;

% Preallocate RMSE array
RMSE = zeros(epoch, 1);

for currentEpoch = 1:epoch
    Tot_Error = 0;
    for currentTrainDataIndex = 1:trainDataSize
        % Forward propagation
        Hidden = input(currentTrainDataIndex, :) * WeightIn;
        logsigHidden = logsig(Hidden);
        
        Output = logsigHidden * WeightHidden;
        linearOutput = purelin(Output);

        % Error calculation
        DeltaOutput = target(currentTrainDataIndex, :) - linearOutput;
        Tot_Error = Tot_Error + DeltaOutput^2;

        % Backpropagation
        DeltaHidden = (DeltaOutput * dpurelin(linearOutput)) * WeightHidden';
        WeightHidden = WeightHidden + 0.45 * logsigHidden' * DeltaOutput * dpurelin(linearOutput);

        % Calculate DeltaInput correctly
        DeltaHidden = DeltaHidden .* dlogsig(logsigHidden);  % Apply derivative element-wise
        WeightIn = WeightIn + 0.45 * input(currentTrainDataIndex, :)' * DeltaHidden;  % Update input weights
    end
    
    % Calculate and store RMSE
    RMSE(currentEpoch) = sqrt(Tot_Error / trainDataSize);
    fprintf('Epoch: %d, RMSE: %f\n', currentEpoch, RMSE(currentEpoch));
end

% Plot RMSE
figure;
plot(1:epoch, RMSE);
legend('Training');
ylabel('RMSE');
xlabel('Epoch');

% Testing phase
Tot_Correct = 0;
for currentTestDataIndex = trainDataSize + 1:trainDataSize + testDataSize
    Hidden = input(currentTestDataIndex, :) * WeightIn;
    logsigHidden = logsig(Hidden);
    Output = logsigHidden * WeightHidden;
    linearOutput = purelin(Output);
    fprintf('Test %d: %f\n',currentTestDataIndex, linearOutput);
    if linearOutput > target(currentTestDataIndex, :) - 0.5 && linearOutput < target(currentTestDataIndex, :) + 0.5
        Tot_Correct = Tot_Correct + 1;
    end
end

Tot_Percent = Tot_Correct / testDataSize;
fprintf('Test Correct Percentage: %f\n', Tot_Percent);
Editor is loading...
Leave a Comment