Resim girdiğim (RGB, 32x32x3) CNN kullanarak bir regresyon gerçekleştirmeye çalışıyorum ve model görüntüdeki nesnenin alan oranını temsil eden normalleştirilmiş bir değer, ör. görüntü boyutu. (ZamanMatConvNet'i kullanarak çıkış gerileme değerini [0,1] aralığında nasıl yapılır?
lr = [.1 2] ;
% Define network CIFAR10-quick
net.layers = {} ;
% Block 1
net.layers{end+1} = struct('type', 'conv', ...
'weights', {{0.01*randn(5,5,3,32, 'single'), zeros(1, 32, 'single')}}, ...
'learningRate', lr, ...
'stride', 1, ...
'pad', 2) ;
net.layers{end+1} = struct('type', 'pool', ...
'method', 'max', ...
'pool', [3 3], ...
'stride', 2, ...
'pad', [0 1 0 1]) ;
net.layers{end+1} = struct('type', 'relu') ;
% Block 2
net.layers{end+1} = struct('type', 'conv', ...
'weights', {{0.05*randn(5,5,32,32, 'single'), zeros(1,32,'single')}}, ...
'learningRate', lr, ...
'stride', 1, ...
'pad', 2) ;
net.layers{end+1} = struct('type', 'relu') ;
net.layers{end+1} = struct('type', 'pool', ...
'method', 'avg', ...
'pool', [3 3], ...
'stride', 2, ...
'pad', [0 1 0 1]) ; % Emulate caffe
% Block 3
net.layers{end+1} = struct('type', 'conv', ...
'weights', {{0.05*randn(5,5,32,64, 'single'), zeros(1,64,'single')}}, ...
'learningRate', lr, ...
'stride', 1, ...
'pad', 2) ;
net.layers{end+1} = struct('type', 'relu') ;
net.layers{end+1} = struct('type', 'pool', ...
'method', 'avg', ...
'pool', [3 3], ...
'stride', 2, ...
'pad', [0 1 0 1]) ; % Emulate caffe
% Block 4
net.layers{end+1} = struct('type', 'conv', ...
'weights', {{0.05*randn(4,4,64,64, 'single'), zeros(1,64,'single')}}, ...
'learningRate', lr, ...
'stride', 1, ...
'pad', 0) ;
net.layers{end+1} = struct('type', 'relu') ;
% Block 5
net.layers{end+1} = struct('type', 'conv', ...
'weights', {{0.05*randn(1,1,64,1, 'single'), zeros(1,1,'single')}}, ...
'learningRate', .1*lr, ...
'stride', 1, ...
'pad', 0) ;
% Loss layer
net.layers{end+1} = struct('type', 'l2normloss') ;
Ancak çıkış regresyon değeri:
function Y = vl_l2normloss(X,c,dzdy)
assert(numel(X) == numel(c));
% n = sizer(X,1) * size(X,2);
n = size(X,4);
if nargin <= 2
Y = sum((X(:) - c(:)).^2) ./ (2*n);
else
assert(numel(dzdy) == 1);
Y = reshape((dzdy/n) * (X(:) - c(:)), size(X));
end
Ve ayrıca aşağıdaki gibi cifar-10 ağ yapısının ikinci son kat modifiye aşağıdaki gibidir: MatConvNet, ben regresyon kaybı fonksiyonu hayata test) [0,1] aralığında DEĞİLDİR. Bunun neden olduğu hakkında hiçbir fikrim yok. Ayarımda yanlış bir şey var mı? Teşekkürler!