*小星星 2021-10-22 19:24 采纳率: 97.2%
浏览 54
已结题

又一个难到我的matlab问题

img

  • 写回答

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))
    

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月23日
  • 已采纳回答 10月23日
  • 创建了问题 10月22日

悬赏问题

  • ¥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