我试图了解如何使用MatConvNet来学习给定I / O对进行训练的函数。
我想发现一个将486维输入向量映射到1D输出值的函数。但是,我无法使网络正常工作,我需要帮助找到我的错误。以下是我所做的详细信息,如果需要任何其他信息,请告诉我。
这是我的训练数据布局,因为它显示在matlab commpand提示符上(我有100万个样本用于训练数据):
>> imdb.images
ans =
data: [4-D single]
label: [1x1000000 single]
set: [1x1000000 double]
>> size(imdb.images.data)
ans =
1 1 486 1000000
我使用的是一个多层完全连接的神经网络,其中一个输入层有486个神经元,一个隐藏层有100个神经元,一个输出层有1个神经元。
我使用完全连接的层定义了网络,如下所示:
trainOpts.batchSize = 10000 ;
trainOpts.numEpochs = 100 ;
trainOpts.continue = false ;
trainOpts.gpus = [1];
trainOpts.learningRate = 0.001 ;
trainOpts.numEpochs = 100 ;
trainOpts.expDir = 'xyz' ;
f = 1/100;
net.layers = {};
net.layers{end+1} = struct('type','conv','weights'{{frandn(1,1,486,100,'single'),zeros(1,100,'single')}},'stride',1,'pad',0);
net.layers{end+1} = struct('type','sigmoid');
net.layers{end+1} = struct('type','conv', 'weights', {{frandn(1,1,100,1,'single'), zeros(1,1,'single')}}, 'stride',1,'pad',0);
net.layers{end+1} = struct('type','sigmoid');
net.layers{end+1} = struct('type','nnL2');
损耗层“vl_nnL2”中的函数是L2损失函数。我已根据https://github.com/vlfeat/matconvnet/issues/15中的建议将其添加到vl_simplenn。我还将cnn_train中的错误估计更改为以下内容:
function err = error_sqerror(opts, labels, res)
predictions = gather(res(end-1).x) ;
if numel(labels) == size(predictions, 4)
labels = reshape(labels,1,1,1,[]) ;
end
error = (abs(labels-predictions).^2);
err = sum(squeeze(error));
以下是培训的情节:
有人可以指出我缺少的东西吗?
谢谢你, 的Ekta