本项目是《MATLAB Deep Learning》(Phil Kim 攥写)的示例源代码。

以最简单的MNIST数据集为例,详细代码如下。

Images = loadMNISTImages('./MNIST/t10k-images.idx3-ubyte'); % 加载图片
Images = reshape(Images, 28, 28, []); % reshape 为张量
Labels = loadMNISTLabels('./MNIST/t10k-labels.idx1-ubyte'); % 加载标签
Labels(Labels == 0) = 10; % 将标签 0 转换为标签 10
rng(1); % 随机数
W1 = 1e-2*randn([9 9 20]); % 随机初始化权重
                      
W5 = (2*rand(100, 2000) - 1) * sqrt(6) / sqrt(360 + 2000); % 随机初始化权重
Wo = (2*rand( 10,  100) - 1) * sqrt(6) / sqrt( 10 +  100); % 随机初始化权重
% 取前 8000 个样本作为训练集
X = Images(:, :, 1:8000);
D = Labels(1:8000);
% 训练模型
%限于计算资源,迭代次数只取3
for epoch = 1:3
  epoch
  [W1, W5, Wo] = MnistConv(W1, W5, Wo, X, D);
end
% 保存模型
save('MnistConv.mat');
% 取后 2000 个样本作为测试集
X = Images(:, :, 8001:10000);
D = Labels(8001:10000);
% 测试
acc = 0;
N   = length(D);
for k = 1:N
  x = X(:, :, k);
  y1 = Conv(x, W1);
  y2 = ReLU(y1);
  y3 = Pool(y2);
  y4 = reshape(y3, [], 1);
  v5 = W5*y4;
  y5 = ReLU(v5);
  v  = Wo*y5;
  y  = Softmax(v);
  [~, i] = max(y); % 输出向量再转换数字标签
  % 统计正确预测的标签数量
  if i == D(k)
    acc = acc + 1;
  end
end
acc = acc / N;
fprintf('Accuracy is %fn', acc);

Accuracy is 0.946500

可视化特征

首先加载训练好的模型

load('MnistConv.mat') % 加载预训练模型

取训练集中第 2 张图片作为例子进行说明

k  = 2;
x  = X(:, :, k);
y1 = Conv(x, W1);
y2 = ReLU(y1);
y3 = Pool(y2);
y4 = reshape(y3, [], 1);
v5 = W5*y4;
y5 = ReLU(v5);
v  = Wo*y5;
y  = Softmax(v);
figure;
display_network(x(:)); % 显示输入的图片
title('Input Image')

matlab输入虚数_输入参数的数目不足matlab_matlab函数怎么输入

显示卷积层用到的滤波器

matlab函数怎么输入_输入参数的数目不足matlab_matlab输入虚数

卷积层用到的滤波器

显示图片经过卷积处理后的结果

输入参数的数目不足matlab_matlab函数怎么输入_matlab输入虚数

卷积处理后的结果

显示图片经过卷积 + ReLU 处理后的结果

matlab函数怎么输入_matlab输入虚数_输入参数的数目不足matlab

过卷积 + ReLU 处理后的结果

显示图片经过卷积 + ReLU + 池化处理后的结果

输入参数的数目不足matlab_matlab输入虚数_matlab函数怎么输入

卷积 + ReLU + 池化处理后的结果

限时特惠:本站每日持续更新海量设计资源,一年会员只需29.9元,全站资源免费下载
站长微信:ziyuanshu688