MATLAB Deep Learning入门

本项目是《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 转换为标签 10rng(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);% 训练模型%限于计算资源,迭代次数只取3for 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;  endendacc = acc / N;fprintf('Accuracy is %f
', 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')

显示卷积层用到的滤波器

卷积层用到的滤波器


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

卷积处理后的结果


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

过卷积 + ReLU 处理后的结果

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

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

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章