UFLDL稀疏自编码器练习第一步:生成训练集
来源:互联网 发布:php秒杀系统设计 编辑:程序博客网 时间:2024/05/18 09:02
今天按照UFLDL稀疏自编码器单元练习要求,编程完成第一步:生成训练集,并用该练习所提供函数显示所选出的图像块。
下面给出所编写的生成训练集程序sampleImagesWEI.m,很简单。为了保持作业原貌,程序采用所提供模版。所以将其中英文注释也换成了中文。
function patches = sampleImagesWEI()
% sampleImages,返回 10000 个训练用图像样本块,64x10000 矩阵形式
% 图像样本块是从所提供图像中随机剪切出的 8x8 块
load IMAGES; % 装入所提供图像
patchsize = 8; % 定义图像快大小(8x8)
numpatches = 10000; % 图像块数量(10000)
% 所有图像块初始化为0,下面编写代码从图像中剪切图像块填充
patches = zeros(patchsize*patchsize, numpatches);
%% ---------- YOUR CODE HERE --------------------------------------
% 说明:用来自 IMAGES 的数据填充称为 patches 的变量
%
% IMAGES 是3D数组,包含10幅图像
% 举例:IMAGES(:,:,6) 是第6幅图像,大小为 512x512
% 可用 imagesc(IMAGES(:,:,6)), colormap gray;命令看看这幅图像
% (这些图像的对比度有些暗,因为被用“白化”方法预处理过,细节见讲义)
% 再举一例:IMAGES(21:30,21:30,1) 是一个 10x10 图像块,对应第一幅图像中
% (21,21)到(30,30)区域图像
% randi(IMax,1,N)函数生成 1xN 随机向量,元素在 1 - IMAX间 均匀采样,有重复
tic
image_size = size(IMAGES);
rowStarter = randi(image_size(1) - patchsize + 1, 1, numpatches);
colStarter = randi(image_size(2) - patchsize + 1, 1, numpatches);
imgSelected = randi(image_size(3), 1, numpatches);
for k = 1 : numpatches
patches(:, k) = reshape( ...
IMAGES( rowStarter(k) : rowStarter(k) + patchsize - 1, ...
colStarter(k) : colStarter(k) + patchsize - 1, ...
imgSelected(k) ), ...
1, patchsize * patchsize);
end
toc
%% ---------------------------------------------------------------
% 为让自编码器好好工作,需要归一化数据
% 这里,因为网络输出界定在 [0,1] 之间(sigmoid激活函数决定)
% 故得确保像素值也在 [0,1] 之间
patches = normalizeData(patches);
end
%% ---------------------------------------------------------------
function patches = normalizeData(patches)
% 因为在输出层使用sigmoid激活函数,故将数据压入 [0.1, 0.9]
% 去除直流成分(图像均值)
patches = bsxfun(@minus, patches, mean(patches));
% 截尾为3倍的标准离差,调整为 -1 到 1
pstd = 3 * std(patches(:));
patches = max(min(patches, pstd), -pstd) / pstd;
% 从 [-1,1] 再调整为 [0.1,0.9]
patches = (patches + 1) * 0.4 + 0.1;
end
关键是for循环前面几句和循环。其它部分是练习中提供的,不用管。
检查所生成训练集时,调用练习所提供的display_network函数。用下面方式调用:
display_networkWEI(img200, [], [], 20);
这样生成的200个图像块按照10x20排列。如果按练习中所提供方式调用,则生成一个12x17图像块,最后四个格子里没有内容,不好看。
- UFLDL稀疏自编码器练习第一步:生成训练集
- UFLDL矢量化编程练习:用MNIST数据集的稀疏自编码器训练实现
- UFLDL练习一(稀疏自编码器 )
- UFLDL稀疏自编码器练习翻译增添公式图片
- UFLDL稀疏自编码器练习翻译增添公式图片
- UFLDL稀疏编码器练习实现
- 【UFLDL】稀疏自编码器AE
- UFLDL教程(一)---稀疏自编码器
- 【UFLDL】Ex1-SparseAutoencoder 稀疏自编码器
- UFLDL教程练习答案一(稀疏自编码器和矢量化编程实现)
- UFLDL教程练习之二:稀疏自编码器和矢量化编程
- UFLDL-稀疏字编码器
- UFLDL练习-稀疏自编码实现
- Stanford UFLDL教程 稀疏自编码器符号一览表
- UFLDL 教程学习笔记:1.稀疏自编码器
- Stanford UFLDL教程 可视化自编码器训练结果
- 深度学习笔记:稀疏自编码器(4)——稀疏自编码器代码练习
- 深度学习入门教程UFLDL学习实验笔记一:稀疏自编码器
- 从Maven仓库中导出jar包
- 构建工程 - Windows
- Android4.4对于sdcard权限的改动
- 自定义Lancher
- mysql数据库的备份、导入、导出命令,以及数据的导入、导出
- UFLDL稀疏自编码器练习第一步:生成训练集
- 运行时库MT、MTd、MD、MDd的研究
- js常用操作
- 内存溢出攻击分析
- JDK 安装需要配置的系统环境变量
- IOS APP切图相关
- Vmware Workstation增加硬盘空间
- java Socket通信(一)
- UCGUI几个基本消息总结