如何使用MatConvNet训练网络学习功能?

时间:2016-02-18 20:48:47

标签: matlab neural-network

我试图了解如何使用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));

以下是培训的情节:

enter image description here

有人可以指出我缺少的东西吗?

谢谢你, 的Ekta

0 个答案:

没有答案