如何通过仿真词中的回归更改软轴层



我正在尝试使用单个输出来训练MNIST数据集。这意味着当我给出28*28输入(图像)时,该模型给了我们一个公正的数字。例如,我给出了" 5",结果给我4.9,5、5.002或接近5。因此,我有一些红色的文档。人们告诉SoftMaxlayer必须通过回归层进行更改。这样做。我正在使用MatConvnet库及其MNIST示例。我已经更改了网络和书面回归层损失功能。这些是我的代码:

net.layers = {} ;
net.layers{end+1} = struct('type', 'conv', ...
                           'weights', {{f*randn(5,5,1,20, 'single'), zeros(1, 20, 'single')}}, ...
                           'stride', 1, ...
                           'pad', 0) ;
net.layers{end+1} = struct('type', 'pool', ...
                           'method', 'max', ...
                           'pool', [2 2], ...
                           'stride', 2, ...
                           'pad', 0) ;
net.layers{end+1} = struct('type', 'conv', ...
                           'weights', {{f*randn(5,5,20,50, 'single'),zeros(1,50,'single')}}, ...
                           'stride', 1, ...
                           'pad', 0) ;
net.layers{end+1} = struct('type', 'pool', ...
                           'method', 'max', ...
                           'pool', [2 2], ...
                           'stride', 2, ...
                           'pad', 0) ;
net.layers{end+1} = struct('type', 'conv', ...
                           'weights', {{f*randn(4,4,50,500, 'single'),  zeros(1,500,'single')}}, ...
                           'stride', 1, ...
                           'pad', 0) ;
net.layers{end+1} = struct('type', 'relu') ;
net.layers{end+1} = struct('type', 'conv', ...
                           'weights', {{f*randn(1,1,500,1, 'single'), zeros(1,1,'single')}}, ...
                           'stride', 1, ...
                           'pad', 0) ;                         
 net.layers{end+1} = struct('type', 'normloss');

这是回归损失函数:

function Y = vl_normloss(X,c,dzdy)
size(X)%1 1 1 100
size(c)%1 100
if nargin <= 2
Y = 0.5*sum((squeeze(X)'-c).^2);
size(Y)%1 1
Y      % 1.7361e+03
else
size(Y)
Y = +((squeeze(X)'-c))*dzdy;
Y = reshape(Y,size(X));
end

我将opts.errorFunction = 'multiclass' ;更改为'none'我也添加

case 'normloss'
      res(i+1).x = vl_normloss(res(i).x,l.class) ;

to VL_Simplenn脚本

但是当我运行火车时,发生此错误

使用VL_NNCONV DEROUTPUT维度与X和 过滤器。

vl_simplenn中的错误(第415行) [res(i).dzdx,dzdw {1},dzdw {2}] = ...

解决这个问题我需要做什么?谢谢

我找到了解决方案。我犯了一个错误。VL_Simplenn脚本中必须更改2条不同的行,但我只更改了一行。此代码有效。

我有一个问题。

net.layers{end+1} = struct('type', 'conv', ...
                           'weights', {{f*randn(1,1,500,1, 'single'), zeros(1,1,'single')}}, ...
                           'stride', 1, ...
                           'pad', 0) ;                         
 net.layers{end+1} = struct('type', 'normloss');

在CONC层中输出[1 1 500 1]显示了1x500的描述符?在损失层中,您如何使用该值?损失层软磁层不应该预测类概率,然后您找到最高的概率相应类吗?或在这种情况下,[1 1 500 1]的输出是概率?

相关内容

  • 没有找到相关文章

最新更新