【ufldl tutorial】Convolution and Pooling

卷积的实现:

对于每幅图像,每个filter,首先从W中取出对应的filter:

filter = squeeze(W(:,:,filterNum));

接下来startercode里面将filter旋转90度并且取出image:

% Flip the feature matrix because of the definition of convolution, as explained later
filter = rot90(squeeze(filter),2);

% Obtain the image
im = squeeze(images(:, :, imageNum));

然后进行卷积,注意这里要用conv2的valid模式,因为这里的卷积不对图像边界之外的像素进行操作:

 %%% YOUR CODE HERE %%%
convolvedImage = conv2(im,filter,‘valid‘);

最后加上偏置b并且作用一个sigmoid函数,最终得到的featuremap放到convolvedFeatures里面:

%%% YOUR CODE HERE %%%
convolvedImage = bsxfun(@plus,convolvedImage,b(filterNum));
convolvedImage = 1 ./ (1+exp(-convolvedImage));

convolvedFeatures(:, :, filterNum, imageNum) = convolvedImage;

完整的实现参见我的github

Pooling的实现:

对于每幅图像的每一个卷积操作得到的featuremap,首先从convolvedFeatures中取出对应的featuremap:

featuremap = squeeze(convolvedFeatures(:,:,featureNum,imageNum));

这里的pooling是通过卷积实现的,如下图所示:

上图第一个正方形表示4*4的featuremap,假设poolDim的大小是2*2,用一个(poolDim*poolDim)的filter对图像进行卷积操作,得到第二个正方形;最后进行步长为poolDim的采样,就得到最后pooling之后的featuremap——第三个正方形。注意这样使用mean pooling,所以filter设置成一个(poolDim*poolDim),值为1/(poolDim*poolDim)的正方形矩阵就可以达到这个目的了,代码如下:

%%% YOUR CODE HERE %%%
    for imageNum = 1:numImages
        for featureNum = 1:numFilters
            featuremap = squeeze(convolvedFeatures(:,:,featureNum,imageNum));
            pooledFeaturemap = conv2(featuremap,ones(poolDim)/(poolDim^2),‘valid‘);
            pooledFeatures(:,:,featureNum,imageNum) = pooledFeaturemap(1:poolDim:end,1:poolDim:end);
        end
    end

两个for中第一行代码得到featuremap,第二行进行卷积求平均值,第三行进行采样并把结果放到pooledFeatures中。

完整代码参见我的github

时间: 2024-10-08 07:41:43

【ufldl tutorial】Convolution and Pooling的相关文章

【ufldl tutorial】Softmax Regression

今天太长姿势了,什么叫懂了也写不出代码说的不就是我吗,就那么几行代码居然叽叽歪歪写了一个小时. 首先exercise要实现的是softmax的cost function和gradient,如下图: (1) (2) (3) 下面就来仔细分析怎么不借助for循环高效的实现上面三个函数. 首先P是一个关键,因为在J和梯度中都出现了,所以现在实现P. 可以看到theta和X的乘积是一个十分重要的量,因为在分子分母中都出现了,所以首先计算假设h=exp(θTX),那么h(k,i)就是exp(θ(k)T*x

emacs 新手笔记(一) —— 阅读【emacs tutorial】

[emacs tutorial]是熟悉 emacs 的入门资料.一共几十个命令,不需硬记,勤练即可. 翻页命令: C-v:向前移动一屏 M-v:向后移动一屏 C-l:重绘屏幕,并将光标所在行置于屏幕的中央 光标控制: C-n:移动到下一行(next) C-p:移动到上一行(previous) C-f:向右移动一个字符(forward) C-b:向左移动一个字符(backward) M-f:向右移动一个词[对中文是移动到下一个标点符号] M-b:向左移动一个词[对中文是移动到上一个标点符号] C-

【转帖】UFLDL Tutorial(the main ideas of Unsupervised Feature Learning and Deep Learning)

UFLDL Tutorial From Ufldl Jump to: navigation, search Description: This tutorial will teach you the main ideas of Unsupervised Feature Learning and Deep Learning.  By working through it, you will also get to implement several feature learning/deep le

【DeepLearning】Exercise:Convolution and Pooling

Exercise:Convolution and Pooling 习题链接:Exercise:Convolution and Pooling cnnExercise.m %% CS294A/CS294W Convolutional Neural Networks Exercise % Instructions % ------------ % % This file contains code that helps you get started on the % convolutional n

【UFLDL】Exercise: Convolutional Neural Network

这个exercise需要完成cnn中的forward pass,cost,error和gradient的计算.需要弄清楚每一层的以上四个步骤的原理,并且要充分利用matlab的矩阵运算.大概把过程总结了一下如下图所示: STEP 1:Implement CNN Objective STEP 1a: Forward Propagation Forward Propagation主要是为了计算输入图片经过神经网络后的输出,这个网络有三层:convolution->pooling->softmax(

【转帖】【面向代码】学习 Deep Learning(三)Convolution Neural Network(CNN)

今天是CNN的内容啦,CNN讲起来有些纠结,你可以事先看看convolution和pooling(subsampling),还有这篇:tornadomeet的博文 下面是那张经典的图: ====================================================================================================== 打开\tests\test_example_CNN.m一观 [cpp] view plaincopyprin

zz【清华NLP】图神经网络GNN论文分门别类,16大应用200+篇论文最新推荐

[清华NLP]图神经网络GNN论文分门别类,16大应用200+篇论文最新推荐 图神经网络研究成为当前深度学习领域的热点.最近,清华大学NLP课题组Jie Zhou, Ganqu Cui, Zhengyan Zhang and Yushi Bai同学对 GNN 相关的综述论文.模型与应用进行了综述,并发布在 GitHub 上.16大应用包含物理.知识图谱等最新论文整理推荐. GitHub 链接: https://github.com/thunlp/GNNPapers 目录            

Python之路【第二篇】:Python基础(一)

Python之路[第二篇]:Python基础(一) 入门知识拾遗 一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. 1 2 3 if 1==1:     name = 'wupeiqi' print  name 下面的结论对吗? 外层变量,可以被内层变量使用 内层变量,无法被外层变量使用 二.三元运算 1 result = 值1 if 条件 else 值2 如果条件为真:result = 值1如果条件为假:result = 值2 三.进制 二进制,01 八进

【CS-4476-project 6】Deep Learning

AlexNet / VGG-F network visualized by mNeuron. Project 6: Deep LearningIntroduction to Computer Vision Brief Due date: Tuesday, December 6th, 11:55pm Project materials including starter code, training and testing data, and html writeup template: proj