1条回答 默认 最新
- 星空下0516 2021-10-22 20:57关注
载入图片:
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))
以前做的,如果有帮助,请采纳,多谢!!!
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 有了解d3和topogram.js库的吗?有偿请教
- ¥100 任意维数的K均值聚类
- ¥15 stamps做sbas-insar,时序沉降图怎么画
- ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
- ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
- ¥15 关于#Java#的问题,如何解决?
- ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
- ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
- ¥15 cmd cl 0x000007b
- ¥20 BAPI_PR_CHANGE how to add account assignment information for service line