matconvnet的Dagnn文件夾中定義了一系列的類如Layers,conv等等,類的構成一般爲:
classdef classname
properties
end
methods
end
end
詳細瞭解的話,可以使用doc classdef命令,去讀一下matlab的幫助文檔
code1:這個就是matconvnet下卷積層類的定義方法
classdef Conv < dagnn.Filter %(<代表繼承)
properties
size = [0 0 0 0]
hasBias = true
opts = {'cuDNN'}
end
methods
function outputs = forward(obj, inputs, params)
if ~obj.hasBias, params{2} = [] ; end
outputs{1} = vl_nnconv(...
inputs{1}, params{1}, params{2}, ...
'pad', obj.pad, ...
'stride', obj.stride, ...
'dilate', obj.dilate, ...
obj.opts{:}) ;
end
function [derInputs, derParams] = backward(obj, inputs, params, derOutputs)
if ~obj.hasBias, params{2} = [] ; end
[derInputs{1}, derParams{1}, derParams{2}] = vl_nnconv(...
inputs{1}, params{1}, params{2}, derOutputs{1}, ...
'pad', obj.pad, ...
'stride', obj.stride, ...
'dilate', obj.dilate, ...
obj.opts{:}) ;
end
function kernelSize = getKernelSize(obj)
kernelSize = obj.size(1:2) ;
end
function outputSizes = getOutputSizes(obj, inputSizes)
outputSizes = [email protected](obj, inputSizes) ;
outputSizes{1}(3) = obj.size(4) ;
end
function params = initParams(obj)
% Xavier improved
sc = sqrt(2 / prod(obj.size(1:3))) ;
%sc = sqrt(2 / prod(obj.size([1 2 4]))) ;
params{1} = randn(obj.size,'single') * sc ;
if obj.hasBias
params{2} = zeros(obj.size(4),1,'single') ;
end
end
function set.size(obj, ksize)
% make sure that ksize has 4 dimensions
ksize = [ksize(:)' 1 1 1 1] ;
obj.size = ksize(1:4) ;
end
function obj = Conv(varargin)
obj.load(varargin) ;
% normalize field by implicitly calling setters defined in
% dagnn.Filter and here
obj.size = obj.size ;
obj.stride = obj.stride ;
obj.pad = obj.pad ;
end
end
end
code:2我自己的一個小demo
classdef classdemo<handle
%2018.12.12
%實例化: l=classdemo
%存放類的文件夾一般以@開頭+類的名字
properties (Access=public)
%properties的有一個屬性Access
%Access=public是公有
%protected保護成員,只有類或者子類能調用
%private只能通過本類對象訪問
name='sunyi';
sex='man';
end
methods (Static)%如果使用Static屬性可以直接調用,不需要實例化
function print(obj,choice)
if(strcmp(choice,'name'))
fprintf('name:%s\n',obj.name);
elseif(strcmp(choice,'sex'))
fprintf('name:%s\n',obj.sex);
end
end
end
events
end
enumeration
end
end