zoukankan      html  css  js  c++  java
  • matlab列优先与高维矩阵重构 及 CNN 逐层可视化 on Matlab

    由于matlab在列化a(:)以及reshape(a)等操作中是列优先的,所以要重构出新的高维度矩阵,通常要把reshape和permute结合起来使用。

    先到 http://caffe.berkeleyvision.org/ 下载 训练好的model bvlc_reference_caffenet.caffemodel;

    更多caffe使用也请参看上面的网址。

     1  clear
     2  close all
     3 
     4 
     5 addpath ./matlab
     6 
     7 model= './models/bvlc_reference_caffenet/deploy.prototxt';
     8 weights= './models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel';
     9 
    10  
    11  net = caffe.Net(model, weights, 'test'); % create net and load weights
    12 
    13 %% obtain params in diff layers and show
    14 pdata = net.params('conv1',1).get_data();
    15 
    16 vis_square(pdata,2,0.5);
    17  
    18   
    19 net.blobs('data').reshape([227 227 3 1]);
    20 net.reshape();
    21 
    22 %% prepare the image
    23 im_data = caffe.io.load_image('./examples/images/cat.jpg');
    24  mean = load('./matlab/+caffe/imagenet/ilsvrc_2012_mean.mat');
    25 
    26 %% subtract mean_data (already in W x H x C, BGR)
    27  mean_data = mean.mean_data;
    28  im_data = im_data - mean_data;  
    29 
    30  width = 227; height = 227;
    31  im_data = imresize(im_data, [width, height]); % resize using Matlab's imresize
    32  res = net.forward({im_data});
    33 
    34  prob = res{1};
    35 
    36 %% obtain features and show
    37  ddata = net.blobs('conv2').get_data();
    38  vis_square(ddata,2,0);
     1 function vis_square(data,padsize,padval)
     2 
     3  data=net_data_normalize(data);
     4 
     5 if ~ exist('padsize', 'var') 
     6   padsize=1;
     7 end
     8 if ~ exist('padval', 'var') 
     9   padval=0;
    10 end
    11 ndim=ndims(data);
    12 % w*num*h*chanel
    13 if ndim==4
    14     fprintf('visualize params
    ');
    15     data=permute(data,[1,4,2,3]);
    16 else ndim==3
    17     fprintf('visualize maps
    ');
    18     data=permute(data,[1,3,2]);
    19 end
    20     
    21     n = (ceil(sqrt(size(data,2))));
    22     data=padarray(data,[padsize n^2-size(data,2) padsize 0],'post');
    23     data=reshape(data,size(data,1),n,n,size(data,3),size(data,4));
    24     data=permute(data,[1,3,4,2,5]);
    25     data=reshape(data,[size(data,1)*n,size(data,3)*n,size(data,5)]);
    26    
    27 figure
    28 if ndim==4
    29     ;
    30 else ndim==3
    31     data=imrotate(data,-90);
    32 end   
    33 
    34 imshow(imresize(data,[500,500],'nearest'))
    35 
    36 end
  • 相关阅读:
    JavaScript
    关于setInterval()你所不知道的地方
    JavaScript面向对象和原型函数
    GET和POST有什么区别?及为什么网上的多数答案都是错的
    10个最常见的 HTML5 面试题及答案
    Ajax我选择这样入门
    前端应当了解的Web缓存知识
    JavaScript
    Linux rhel7 下MySQL5.7.18详细安装文档
    思科交换机配置DHCP的四个方面
  • 原文地址:https://www.cnblogs.com/jeffwilson/p/4750938.html
Copyright © 2011-2022 走看看