UFLDL Tutorial 学习笔记

2024-06-15 13:48
文章标签 学习 笔记 tutorial ufldl

本文主要是介绍UFLDL Tutorial 学习笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

卷积层和池化层练习

卷积层的实现代码。其中使用的matlab中conv2:
matlab中conv2 函数在计算二维卷积应用实例如下:
格式:C=conv2(A,B)
        C=conv2(Hcol,Hrow,A)
        C=conv2(...,'shape')
说明:对于 C=conv2(A,B) ,conv2 的算矩阵 A 和 B 的卷积,若 [Ma,Na]=size(A), [Mb,Nb]=size(B), 则 size(C)=[Ma+Mb-1,Na+Nb-1];
C=conv2(Hcol,Hrow,A) 中,矩阵 A 分别与 Hcol 向量在列方向和 Hrow 向量在行方向上进行卷积;C=conv2(...,'shape') 用来指定 conv2
返回二维卷积结果部分,参数 shape 可取值如下:
        》full 为缺省值,返回二维卷积的全部结果;
        》same 返回二维卷积结果中与 A 大小相同的中间部分;
        valid 返回在卷积过程中,未使用边缘补 0 部分进行计算的卷积结果部分,当 size(A)>size(B) 时,size(C)=[Ma-Mb+1,Na-Nb+1]

function convolvedFeatures = cnnConvolve(filterDim, numFilters, images, W, b)
%cnnConvolve Returns the convolution of the features given by W and b with
%the given images
%
% Parameters:
%  filterDim - filter (feature) dimension
%  numFilters - number of feature maps
%  images - large images to convolve with, matrix in the form
%           images(r, c, image number)
%  W, b - W, b for features from the sparse autoencoder
%         W is of shape (filterDim,filterDim,numFilters)
%         b is of shape (numFilters,1)
%  W是卷积的稀疏矩阵,b是直流分量是一个偏执。
% Returns:
%  convolvedFeatures - matrix of convolved features in the form
%                      convolvedFeatures(imageRow, imageCol, featureNum, imageNum)numImages = size(images, 3);
imageDim = size(images, 1);
convDim = imageDim - filterDim + 1;%计算维度convolvedFeatures = zeros(convDim, convDim, numFilters, numImages);% Instructions:
%   Convolve every filter with every image here to produce the 
%   (imageDim - filterDim + 1) x (imageDim - filterDim + 1) x numFeatures x numImages
%   matrix convolvedFeatures, such that 
%   convolvedFeatures(imageRow, imageCol, featureNum, imageNum) is the
%   value of the convolved featureNum feature for the imageNum image over
%   the region (imageRow, imageCol) to (imageRow + filterDim - 1, imageCol + filterDim - 1)
%
% Expected running times: 
%   Convolving with 100 images should take less than 30 seconds 
%   Convolving with 5000 images should take around 2 minutes
%   (So to save time when testing, you should convolve with less images, as
%   described earlier)for imageNum = 1:numImagesfor filterNum = 1:numFilters% convolution of image with feature matrixconvolvedImage = zeros(convDim, convDim);% Obtain the feature (filterDim x filterDim) needed during the convolution%%% YOUR CODE HERE %%%filter = W(:,:,filterNum);%取卷积矩阵bc = b(filterNum);% Flip the feature matrix because of the definition of convolution, as explained later% squeeze去除size为1的维度,也就是去除后面filterNum的维度filter = rot90(squeeze(filter),2);% Obtain the imageim = squeeze(images(:, :, imageNum));% Convolve "filter" with "im", adding the result to convolvedImage% be sure to do a 'valid' convolution%%% YOUR CODE HERE %%%% valid 返回在卷积过程中,未使用边缘补 0 部分进行计算的卷积结果部分convolvedImage = conv2(im,filter,'valid');% Add the bias unit% Then, apply the sigmoid function to get the hidden activation%%% YOUR CODE HERE %%%convolvedImage = sigmoid(convolvedImage+bc);convolvedFeatures(:, :, filterNum, imageNum) = convolvedImage;end
endend
function sigmoid = sigmoid(x)sigmoid = 1./(1+exp(-x));
end

池化层,这里池化层步长和卷积核的维度相同
function pooledFeatures = cnnPool(poolDim, convolvedFeatures)
%cnnPool Pools the given convolved features
%
% Parameters:
%  poolDim - dimension of pooling region
%  convolvedFeatures - convolved features to pool (as given by cnnConvolve)
%                      convolvedFeatures(imageRow, imageCol, featureNum, imageNum)
%
% Returns:
%  pooledFeatures - matrix of pooled features in the form
%                   pooledFeatures(poolRow, poolCol, featureNum, imageNum)
%     numImages = size(convolvedFeatures, 4);%图片数量
numFilters = size(convolvedFeatures, 3);%特征数量等于卷积核数量
convolvedDim = size(convolvedFeatures, 1);%图片的行数,这里行数等于列数
%步长是filterdim
pooledFeatures = zeros(convolvedDim / poolDim, ...convolvedDim / poolDim, numFilters, numImages);% Instructions:
%   Now pool the convolved features in regions of poolDim x poolDim,
%   to obtain the 
%   (convolvedDim/poolDim) x (convolvedDim/poolDim) x numFeatures x numImages 
%   matrix pooledFeatures, such that
%   pooledFeatures(poolRow, poolCol, featureNum, imageNum) is the 
%   value of the featureNum feature for the imageNum image pooled over the
%   corresponding (poolRow, poolCol) pooling region. 
%   
%   Use mean pooling here.%%% YOUR CODE HERE %%%
for imageNum = 1:numImagesfor numFilter=1:numFiltersfor poolRow=1:convolvedDim / poolDimfor poolCol=1:convolvedDim / poolDimpatch = convolvedFeatures((poolRow-1)*poolDim+1:poolRow*poolDim,...(poolCol-1)*poolDim+1:poolCol*poolDim,numFilter,imageNum);pooledFeatures(poolRow,poolCol,numFilter,imageNum)=mean(patch(:));endendend
end
end
验证卷积层和池化层的正确性,UFLDL给的代码是:

%% Convolution and Pooling Exercise%  Instructions
%  ------------
% 
%  This file contains code that helps you get started on the
%  convolution and pooling exercise. In this exercise, you will only
%  need to modify cnnConvolve.m and cnnPool.m. You will not need to modify
%  this file.%%======================================================================
%% STEP 0: Initialization and Load Data
%  Here we initialize some parameters used for the exercise.imageDim = 28;         % image dimensionfilterDim = 8;          % filter dimension
numFilters = 100;         % number of feature mapsnumImages = 60000;    % number of imagespoolDim = 3;          % dimension of pooling region% Here we load MNIST training images
addpath ../common/;
images = loadMNISTImages('../common/train-images.idx3-ubyte');
images = reshape(images,imageDim,imageDim,numImages);W = randn(filterDim,filterDim,numFilters);
b = rand(numFilters);%%======================================================================
%% STEP 1: Implement and test convolution
%  In this step, you will implement the convolution and test it on
%  on a small part of the data set to ensure that you have implemented
%  this step correctly.%% STEP 1a: Implement convolution
%  Implement convolution in the function cnnConvolve in cnnConvolve.m%% Use only the first 8 images for testing
convImages = images(:, :, 1:8); % NOTE: Implement cnnConvolve in cnnConvolve.m first!
convolvedFeatures = cnnConvolve(filterDim, numFilters, convImages, W, b);%% STEP 1b: Checking your convolution
%  To ensure that you have convolved the features correctly, we have
%  provided some code to compare the results of your convolution with
%  activations from the sparse autoencoder% For 1000 random points
for i = 1:1000   filterNum = randi([1, numFilters]);imageNum = randi([1, 8]);imageRow = randi([1, imageDim - filterDim + 1]);imageCol = randi([1, imageDim - filterDim + 1]);    patch = convImages(imageRow:imageRow + filterDim - 1, imageCol:imageCol + filterDim - 1, imageNum);feature = sum(sum(patch.*W(:,:,filterNum)))+b(filterNum);feature = 1./(1+exp(-feature));if abs(feature - convolvedFeatures(imageRow, imageCol,filterNum, imageNum)) > 1e-9fprintf('Convolved feature does not match test feature\n');fprintf('Filter Number    : %d\n', filterNum);fprintf('Image Number      : %d\n', imageNum);fprintf('Image Row         : %d\n', imageRow);fprintf('Image Column      : %d\n', imageCol);fprintf('Convolved feature : %0.5f\n', convolvedFeatures(imageRow, imageCol, filterNum, imageNum));fprintf('Test feature : %0.5f\n', feature);       error('Convolved feature does not match test feature');end 
enddisp('Congratulations! Your convolution code passed the test.');%%======================================================================
%% STEP 2: Implement and test pooling
%  Implement pooling in the function cnnPool in cnnPool.m%% STEP 2a: Implement pooling
% NOTE: Implement cnnPool in cnnPool.m first!
pooledFeatures = cnnPool(poolDim, convolvedFeatures);%% STEP 2b: Checking your pooling
%  To ensure that you have implemented pooling, we will use your pooling
%  function to pool over a test matrix and check the results.testMatrix = reshape(1:64, 8, 8);
expectedMatrix = [mean(mean(testMatrix(1:4, 1:4))) mean(mean(testMatrix(1:4, 5:8))); ...mean(mean(testMatrix(5:8, 1:4))) mean(mean(testMatrix(5:8, 5:8))); ];testMatrix = reshape(testMatrix, 8, 8, 1, 1);pooledFeatures = squeeze(cnnPool(4, testMatrix));if ~isequal(pooledFeatures, expectedMatrix)disp('Pooling incorrect');disp('Expected');disp(expectedMatrix);disp('Got');disp(pooledFeatures);
elsedisp('Congratulations! Your pooling code passed the test.');
end
参考网址:
http://ufldl.stanford.edu/tutorial/

这篇关于UFLDL Tutorial 学习笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1063625

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件