zoukankan      html  css  js  c++  java
  • ufldl学习笔记和编程作业:Feature Extraction Using Convolution,Pooling(卷积和汇集特征提取)

    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
    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)
    %
    % 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:numImages
      for filterNum = 1:numFilters
    
        % convolution of image with feature matrix
        convolvedImage = zeros(convDim, convDim);
    
        % Obtain the feature (filterDim x filterDim) needed during the convolution
    
        %%% YOUR CODE HERE %%%
        filter = W(:,:,filterNum);
    
        % Flip the feature matrix because of the definition of convolution, as explained later
        filter = rot90(squeeze(filter),2); %squeeze是把仅仅有一个维度的那一维给去掉。

    这里就是把第三维给去掉,三维变二维。

    % Obtain the image im = squeeze(images(:, :, imageNum)); % Convolve "filter" with "im", adding the result to convolvedImage % be sure to do a 'valid' convolution %%% YOUR CODE HERE %%% convolvedImage =conv2(im, filter,"valid");%加上valid參数,以下代码不要了。

    %conv2Dim = size(convolvedImage,1); %im_start = (conv2Dim - convDim+2)/2; %im_end = im_start+convDim-1; %convolvedImage = convolvedImage(im_start:im_end,im_start:im_end);%取中间部分 % Add the bias unit % Then, apply the sigmoid function to get the hidden activation %%% YOUR CODE HERE %%% convolvedImage = convolvedImage.+b(filterNum); convolvedImage = sigmoid(convolvedImage); convolvedImage = reshape(convolvedImage,convDim, convDim, 1, 1);%2维变维4维 convolvedFeatures(:, :, filterNum, imageNum) = convolvedImage; end end end





    cnnPool.m
    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);
    
    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 %%%
    filter = ones(poolDim);
    for imageNum=1:numImages
    	for filterNum=1:numFilters
    		im = squeeze(squeeze(convolvedFeatures(:, :,filterNum,imageNum)));%貌似squeeze不要也能够
    	    pooledImage =conv2(im, filter,"valid");
        	pooledImage = pooledImage(1:poolDim:end,1:poolDim:end);%取中间部分
        	pooledImage = pooledImage./(poolDim*poolDim);
    
        	%pooledImage = sigmoid(pooledImage); %不须要sigmoid
        	pooledImage = reshape(pooledImage,convolvedDim / poolDim, convolvedDim / poolDim, 1, 1);%2维变维4维
        
        	pooledFeatures(:, :, filterNum, imageNum) = pooledImage;
    	end
    end
    
    end
    



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










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

  • 相关阅读:
    Django model 字段类型及选项解析(二)
    MYSQL数据库设计规范与原则
    爬虫相关模块命令回顾
    Django model 字段类型及选项解析(一)
    Django自身安全机制-XSS和CSRF
    分页
    css样式大全
    HTML标签和属性大全
    IsPost 判断
    HTML中夹杂CODE
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4731179.html
Copyright © 2011-2022 走看看