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 + 池化处理后的结果

展开阅读全文

页面更新:2024-05-12

标签:张量   卷积   滤波器   权重   初始化   样本   入门   模型   加载   标签   图片

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top