ufldl学习笔记与编程作业:Feature Extraction Using Convolution,Pooling(卷积和池化抽取特征)

ufldl出了新教程,感觉比之前的好,从基础讲起。系统清晰。又有编程实践。

在deep learning高质量群里面听一些前辈说。不必深究其它机器学习的算法。能够直接来学dl。

于是近期就開始搞这个了。教程加上matlab编程,就是完美啊。

新教程的地址是:http://ufldl.stanford.edu/tutorial/



学习链接:
http://ufldl.stanford.edu/tutorial/supervised/FeatureExtractionUsingConvolution/
http://ufldl.stanford.edu/tutorial/supervised/Pooling/
http://ufldl.stanford.edu/tutorial/supervised/ExerciseConvolutionAndPooling/


卷积:用了matlab的conv2函数,这里用的有点挫。由于conv2算的是数学意义上的卷积,函数内部会把filter做180翻转。
而其实我们不是想算数学意义上的卷积。仅仅是简单算 “内积”,点对点相乘再求和。所以,我们得先把filter翻转,再传给conv2,就达到我们目的了。
其实。我想。其实。反不反转。并不影响终于的结果的。由于毕竟W是调整出来的。

池化:这里池化的步长,跟poolDim相等,不会交叉。

这里用了conv2来算均值,能够优化性能。

记得。这里不须要激活函数。!!


这次练习较为简单。

只是几个matlab函数还是得简单总结一下:

conv2求卷积
squeeze把仅仅有一个维度的那一维给去掉
rot90做90度旋转
reshape维度变换


执行结果:

这里练习主要是检測写的两个函数是否正确。


以下是主要代码:

cnnConvolve.m
  1. function convolvedFeatures = cnnConvolve(filterDim, numFilters, images, W, b)
  2. %cnnConvolve Returns the convolution of the features given by W and b with
  3. %the given images
  4. %
  5. % Parameters:
  6. % filterDim - filter (feature) dimension
  7. % numFilters - number of feature maps
  8. % images - large images to convolve with, matrix in the form
  9. % images(r, c, image number) % -------------注意维度的位置
  10. % W, b - W, b for features from the sparse autoencoder
  11. % W is of shape (filterDim,filterDim,numFilters)
  12. % b is of shape (numFilters,1)
  13. %
  14. % Returns:
  15. % convolvedFeatures - matrix of convolved features in the form
  16. % convolvedFeatures(imageRow, imageCol, featureNum, imageNum) % ----------注意维度的位置
  17.  
  18. numImages = size(images, 3);
  19. imageDim = size(images, 1); %行数,即是高度。 这里没算宽度,貌似默认高宽相等。
  20. convDim = imageDim - filterDim + 1; % 卷积后,特征的高度
  21.  
  22. convolvedFeatures = zeros(convDim, convDim, numFilters, numImages);
  23.  
  24. % Instructions:
  25. % Convolve every filter with every image here to produce the
  26. % (imageDim - filterDim + 1) x (imageDim - filterDim + 1) x numFeatures x numImages
  27. % matrix convolvedFeatures, such that
  28. % convolvedFeatures(imageRow, imageCol, featureNum, imageNum) is the
  29. % value of the convolved featureNum feature for the imageNum image over
  30. % the region (imageRow, imageCol) to (imageRow + filterDim - 1, imageCol + filterDim - 1)
  31. %
  32. % Expected running times:
  33. % Convolving with 100 images should take less than 30 seconds
  34. % Convolving with 5000 images should take around 2 minutes
  35. % (So to save time when testing, you should convolve with less images, as
  36. % described earlier)
  37.  
  38. for imageNum = 1:numImages
  39. for filterNum = 1:numFilters
  40.  
  41. % convolution of image with feature matrix
  42. convolvedImage = zeros(convDim, convDim);
  43.  
  44. % Obtain the feature (filterDim x filterDim) needed during the convolution
  45.  
  46. %%% YOUR CODE HERE %%%
  47. filter = W(:,:,filterNum);
  48.  
  49. % Flip the feature matrix because of the definition of convolution, as explained later
  50. filter = rot90(squeeze(filter),2); %squeeze是把仅仅有一个维度的那一维给去掉。
  51.  
  52. 这里就是把第三维给去掉,三维变二维。
  53.  
  54. % Obtain the image
  55. im = squeeze(images(:, :, imageNum));
  56.  
  57. % Convolve "filter" with "im", adding the result to convolvedImage
  58. % be sure to do a 'valid' convolution
  59.  
  60. %%% YOUR CODE HERE %%%
  61. convolvedImage =conv2(im, filter,"valid");%加上valid參数,以下代码不要了。
  62.  
  63. %conv2Dim = size(convolvedImage,1);
  64. %im_start = (conv2Dim - convDim+2)/2;
  65. %im_end = im_start+convDim-1;
  66. %convolvedImage = convolvedImage(im_start:im_end,im_start:im_end);%取中间部分
  67.  
  68. % Add the bias unit
  69. % Then, apply the sigmoid function to get the hidden activation
  70.  
  71. %%% YOUR CODE HERE %%%
  72. convolvedImage = convolvedImage.+b(filterNum);
  73. convolvedImage = sigmoid(convolvedImage);
  74. convolvedImage = reshape(convolvedImage,convDim, convDim, 1, 1);%2维变维4
  75.  
  76. convolvedFeatures(:, :, filterNum, imageNum) = convolvedImage;
  77. end
  78. end
  79.  
  80. end



cnnPool.m
  1. function pooledFeatures = cnnPool(poolDim, convolvedFeatures)
  2. %cnnPool Pools the given convolved features
  3. %
  4. % Parameters:
  5. % poolDim - dimension of pooling region
  6. % convolvedFeatures - convolved features to pool (as given by cnnConvolve)
  7. % convolvedFeatures(imageRow, imageCol, featureNum, imageNum)
  8. %
  9. % Returns:
  10. % pooledFeatures - matrix of pooled features in the form
  11. % pooledFeatures(poolRow, poolCol, featureNum, imageNum)
  12. %
  13.  
  14. numImages = size(convolvedFeatures, 4);
  15. numFilters = size(convolvedFeatures, 3);
  16. convolvedDim = size(convolvedFeatures, 1);
  17.  
  18. pooledFeatures = zeros(convolvedDim / poolDim, ...
  19. convolvedDim / poolDim, numFilters, numImages);
  20.  
  21. % Instructions:
  22. % Now pool the convolved features in regions of poolDim x poolDim,
  23. % to obtain the
  24. % (convolvedDim/poolDim) x (convolvedDim/poolDim) x numFeatures x numImages
  25. % matrix pooledFeatures, such that
  26. % pooledFeatures(poolRow, poolCol, featureNum, imageNum) is the
  27. % value of the featureNum feature for the imageNum image pooled over the
  28. % corresponding (poolRow, poolCol) pooling region.
  29. %
  30. % Use mean pooling here.
  31.  
  32. %%% YOUR CODE HERE %%%
  33. filter = ones(poolDim);
  34. for imageNum=1:numImages
  35. for filterNum=1:numFilters
  36. im = squeeze(squeeze(convolvedFeatures(:, :,filterNum,imageNum)));%貌似squeeze不要也能够
  37. pooledImage =conv2(im, filter,"valid");
  38. pooledImage = pooledImage(1:poolDim:end,1:poolDim:end);%取中间部分
  39. pooledImage = pooledImage./(poolDim*poolDim);
  40.  
  41. %pooledImage = sigmoid(pooledImage); %不须要sigmoid
  42. pooledImage = reshape(pooledImage,convolvedDim / poolDim, convolvedDim / poolDim, 1, 1);%2维变维4
  43.  
  44. pooledFeatures(:, :, filterNum, imageNum) = pooledImage;
  45. end
  46. end
  47.  
  48. end


本文作者:linger
本文链接:http://blog.csdn.net/lingerlanlan/article/details/38502627










版权声明:本文博客原创文章。博客,未经同意,不得转载。

ufldl学习笔记和编程作业:Feature Extraction Using Convolution,Pooling(卷积和汇集特征提取)的更多相关文章

  1. ufldl学习笔记和编程作业:Softmax Regression(softmax回报)

    ufldl学习笔记与编程作业:Softmax Regression(softmax回归) ufldl出了新教程.感觉比之前的好,从基础讲起.系统清晰,又有编程实践. 在deep learning高质量 ...

  2. ufldl学习笔记与编程作业:Softmax Regression(vectorization加速)

    ufldl学习笔记与编程作业:Softmax Regression(vectorization加速) ufldl出了新教程,感觉比之前的好.从基础讲起.系统清晰,又有编程实践. 在deep learn ...

  3. ufldl学习笔记与编程作业:Multi-Layer Neural Network(多层神经网络+识别手写体编程)

    ufldl学习笔记与编程作业:Multi-Layer Neural Network(多层神经网络+识别手写体编程) ufldl出了新教程,感觉比之前的好,从基础讲起,系统清晰,又有编程实践. 在dee ...

  4. ufldl学习笔记与编程作业:Logistic Regression(逻辑回归)

    ufldl学习笔记与编程作业:Logistic Regression(逻辑回归) ufldl出了新教程,感觉比之前的好,从基础讲起.系统清晰,又有编程实践. 在deep learning高质量群里面听 ...

  5. ufldl学习笔记与编程作业:Linear Regression(线性回归)

    ufldl学习笔记与编程作业:Linear Regression(线性回归) ufldl出了新教程,感觉比之前的好.从基础讲起.系统清晰,又有编程实践. 在deep learning高质量群里面听一些 ...

  6. 我的学习笔记_Windows_HOOK编程 2009-12-03 11:19

    一.什么是HOOK? "hook"这个单词的意思是"钩子","Windows Hook"是Windows消息处理机制的一个重要扩展,程序猿能 ...

  7. 大数据学习笔记——Hadoop编程实战之Mapreduce

    Hadoop编程实战——Mapreduce基本功能实现 此篇博客承接上一篇总结的HDFS编程实战,将会详细地对mapreduce的各种数据分析功能进行一个整理,由于实际工作中并不会过多地涉及原理,因此 ...

  8. 大数据学习笔记——Hadoop编程实战之HDFS

    HDFS基本API的应用(包含IDEA的基本设置) 在上一篇博客中,本人详细地整理了如何从0搭建一个HA模式下的分布式Hadoop平台,那么,在上一篇的基础上,我们终于可以进行编程实操了,同样,在编程 ...

  9. 学习笔记之编程珠玑 Programming Pearls

    Programming Pearls (2nd Edition): Jon Bentley: 0785342657883: Amazon.com: Books https://www.amazon.c ...

随机推荐

  1. Oracle自带的exception

    存储过程中自带的exception: --查询人员资料历史 BEGIN SELECT * INTO Po_Sac01 FROM Sac01 WHERE Aac001 = Pi_Aac001 ); EX ...

  2. USACO Runaround Numbers 模拟

    根据题意的 Runaround 规则去找比当前数大的最近的一个 Runaround数字 模拟题~ Source code: /* ID: wushuai2 PROG: runround LANG: C ...

  3. HDU 5012 Dice DFS

    简单DFS //#pragma comment(linker, "/STACK:16777216") //for c++ Compiler #include <stdio.h ...

  4. beep的控制程序

    参照艾米电子的程序进行改写的 //date : 2014,5,4 module for_beep ( clock , reset , out_beep ); input clock ,reset ; ...

  5. 插件化—配置xml的辅助测试

    1.xml文件,xml文件在res/xml目录下 <?xml version="1.0" encoding="utf-8"?> <infos& ...

  6. Arduino 入门程序示例之直流电机(2015-06-15)

    概述 演示直流电机的控制. 示例程序 PWM控制直流电机 略过控制电机转停的示例啦,有需要就把这里的 PWM 换成数字口输出 HIGH 或 LOW 就行了. // ------------------ ...

  7. 知识点1-2:ASP.NET MVC背景

    1.发展阶段 CGI(公共网关接口)-->ASP(Active Server Pages,活动服务器页面)-->.NET 2. .NET平台 2002年初,微软发布了第一版.NET框架,这 ...

  8. HTTP1.1协议中文版-RFC2616

    转自:http://www.cnpaf.net/Class/HTTP/200811/23277.html 说明 本文档规定了互联网社区的标准组协议,并需要讨论和建议以便更加完善.请参考 “互联网官方协 ...

  9. 用PowerMockito来mock私有方法(转)

    话说我们做的所谓的接口测试真的是不伦不类啊,测的是controller层,那叫接口木??!!可是老大们说写的是接口测试,那就接口吧! 自接手写这个接口测试不久,很多人,包括一个关系比较好的架构师就跟我 ...

  10. mysql Emoji表情字符集转换

    <pre name="code" class="html">Java代码 java.sql.SQLException: Incorrect stri ...