又一个难到我的matlab问题

问题描述:

img

载入图片:

function images = loadMNISTImages(filename)
%loadMNISTImages returns a 28x28x[number of MNIST images] matrix containing
%the raw MNIST images

fp = fopen(filename, 'rb');
assert(fp ~= -1, ['Could not open ', filename, '']);

magic = fread(fp, 1, 'int32', 0, 'ieee-be');
assert(magic == 2051, ['Bad magic number in ', filename, '']);

numImages = fread(fp, 1, 'int32', 0, 'ieee-be');
numRows = fread(fp, 1, 'int32', 0, 'ieee-be');
numCols = fread(fp, 1, 'int32', 0, 'ieee-be');

images = fread(fp, inf, 'unsigned char');
images = reshape(images, numCols, numRows, numImages);
images = permute(images,[2 1 3]);

fclose(fp);

% Reshape to #pixels x #examples
images = reshape(images, size(images, 1) * size(images, 2), size(images, 3));
% Convert to double and rescale to [0,1]
images = double(images) / 255;

end

载入标签:

function images = loadMNISTImages(filename)
%loadMNISTImages returns a 28x28x[number of MNIST images] matrix containing
%the raw MNIST images

fp = fopen(filename, 'rb');
assert(fp ~= -1, ['Could not open ', filename, '']);

magic = fread(fp, 1, 'int32', 0, 'ieee-be');
assert(magic == 2051, ['Bad magic number in ', filename, '']);

numImages = fread(fp, 1, 'int32', 0, 'ieee-be');
numRows = fread(fp, 1, 'int32', 0, 'ieee-be');
numCols = fread(fp, 1, 'int32', 0, 'ieee-be');

images = fread(fp, inf, 'unsigned char');
images = reshape(images, numCols, numRows, numImages);
images = permute(images,[2 1 3]);

fclose(fp);

% Reshape to #pixels x #examples
images = reshape(images, size(images, 1) * size(images, 2), size(images, 3));
% Convert to double and rescale to [0,1]
images = double(images) / 255;

end

训练:

close all;
clear all;

% prepare MLP
inputLayerSize = 784 % input layer
hiddenLayerSize = 14 % hidden layer
outputLayerSize = 10 % output layer
rate = 0.3 % learning rate
epochs = 3
pc_count = 40 % number of principle components (dimensionality reduction)
training_size = 60000
test_size = 10000

% initialise MLP
mlp = MLP(inputLayerSize, hiddenLayerSize, outputLayerSize);
mlp.initWeight(1);

% load in dataset
training = loadMNISTImages('train-images-idx3-ubyte');
training_targets_raw = loadMNISTLabels('train-labels-idx1-ubyte');
testing = loadMNISTImages('t10k-images-idx3-ubyte');
testing_targets_raw = loadMNISTLabels('t10k-labels-idx1-ubyte');

% reduce dataset size
training = training(:,1:training_size);
training_targets_raw = training_targets_raw(1:training_size,:);
testing = testing(:,1:test_size);
testing_targets_raw = testing_targets_raw(1:test_size,:);

% create one-hot encoded vectors (for output values)
training_targets = zeros(length(training_targets_raw), 10);
for i = 1:length(training_targets_raw)
    training_targets(i, training_targets_raw(i,1)+1) = 1;
end
testing_targets = zeros(length(testing_targets_raw), 10);
for i = 1:length(testing_targets_raw)
    testing_targets(i, testing_targets_raw(i,1)+1) = 1;
end

% dimensionality reduction (training)
[pc_coeff,score,var,~,~,mu] = pca(training);
figure('Name','Variance by principle componeent')
bar(var) % show variance by principle component
xlabel('Principle component')
ylabel('Variance')
recon = score(:,1:pc_count) * pc_coeff(:,1:pc_count)' + repmat(mu, size(score, 1), 1);
training = recon;

% dimensionality reduction (testing)
[pc_coeff,score,var,~,~,mu] = pca(testing);
recon = score(:,1:pc_count) * pc_coeff(:,1:pc_count)' + repmat(mu, size(score, 1), 1);
testing = recon;

% begin training
total_training_error = [];
for l = 1:epochs
    fprintf('EPOCH %i \n', l)
    epoch_training_error = [];
    for k = 1:size(training, 2)
        fprintf('DATA %i \n', k)
        current = training(:,k);
        target = training_targets(k,:);
        current_training_error = mlp.adapt_to_target(current, target, rate);
        epoch_training_error = [epoch_training_error current_training_error];
    end
    total_training_error = [total_training_error mean(epoch_training_error)];
end
figure('Name', 'All training data points');
gscatter(training(1,:), training(1,:), training_targets)
title('(TRAINING) all training data points')
figure('Name', 'Error rate by epoch');
scatter(1:epochs, total_training_error)
title('(TRAINING) error rate by epoch')
mean_training_error = mean(total_training_error)
last_epoch_training_error = total_training_error(epochs)

% begin testing
total_testing_error = [];
for k = 1:size(testing, 2)
    fprintf('DATA %i \n', k)
    current = testing(:,k);
    target = testing_targets(k,:);
    output = mlp.compute_output(current);
    current_testing_error = abs(abs(output) - target);
    total_testing_error = [total_testing_error current_testing_error];
end
figure('Name', 'All testing data points');
gscatter(testing(1,:), testing(1,:), testing_targets)
title('(TESTING) all testing data points')

fprintf('Mean training error was: %f \n', mean(mean_training_error))
fprintf('Final training epoch error was: %f \n', last_epoch_training_error)
fprintf('Mean testing error was: %f \n', mean(total_testing_error))

以前做的,如果有帮助,请采纳,多谢!!!