我想运行这个例子。当我使用mnist_uint8数据时,我可以很好地运行这段代码。但是,如果我使用自己的数据运行一个模型(如DBN.m),下面的代码如下:
[er, bad] = nntest(nn, test_x, test_y); 将不运行,er为零。为什么会发生这种事?我的训练数据的输入大小为320*200,输出为320*1。
编辑:添加代码和数据文件
load dataX
load dataY
load pdataX
load pdataY
train_x=dataX/100
test_x=pdataX/100
pdataY(find(pdataY(:,:)<=20))=0;
pdataY(find(pdataY(:,:)>20))=1;
dataY(find(dataY(:,:)<=20))=0;
dataY(find(dataY(:,:)>20))=1;
train_y=dataY
test_y=pdataY
rand('state',0);
dbn.sizes = [100 40];
%train a 100-40 hidden unit DBN
opts.numepochs = 1;
opts.batchsize = 40;
opts.momentum = 0;
opts.alpha = 1;
dbn = dbnsetup(dbn, train_x, opts);
dbn = dbntrain(dbn, train_x, opts);
%unfold dbn to nn nn = dbnunfoldtonn(dbn, 1);
nn.activation_function = 'sigm';
%train nn opts.numepochs = 1;
opts.batchsize = 40;
nn = nntrain(nn, train_x, train_y, opts);
[er, bad] = nntest(nn, test_x, test_y);这是数据
发布于 2015-04-16 03:26:34
编辑:
经过大量讨论(见评论),问题是目标(Y)需要使用单N编码格式进行培训和测试。例如,1类为1 0,2类为0 1,修改后的代码产生的基本错误率为0.2125。进一步的调优和架构更改应该会产生更好的结果。
clear all
load dataX
load dataY
load pdataX
load pdataY
train_x=dataX/100;
test_x=pdataX/100;
pdataY(find(pdataY(:,:)<=20))=0;
pdataY(find(pdataY(:,:)>20))=1;
dataY(find(dataY(:,:)<=20))=0;
dataY(find(dataY(:,:)>20))=1;
train_y=dataY
test_y=pdataY
% Add dimension for one-of-N encoding
train_y(:,2) = 1-train_y(:,1);
test_y(:,2) = 1-test_y(:,1);
rand('state',0)
dbn.sizes = [100 40];
%train a 100-40 hidden unit DBN
opts.numepochs = 2;
opts.batchsize = 40;
opts.momentum = 0;
opts.alpha = 1;
dbn = dbnsetup(dbn, train_x, opts);
dbn = dbntrain(dbn, train_x, opts);
%unfold dbn to nn
nn = dbnunfoldtonn(dbn, 2);
nn.activation_function = 'sigm';
%train nn
opts.numepochs = 100;
opts.batchsize = 40;
nn = nntrain(nn, train_x, train_y, opts);
[er, bad] = nntest(nn, test_x, test_y);原来的答案:
我假设您的培训数据是200个特性和320个培训示例。假设您对其进行了适当的培训,那么您可能需要执行功能约简。我知道在MNIST数据集上运行的ML算法使用主成分分析(参见Matlab函数主成分分析())对其进行预处理以截断某些特性是很流行的。请张贴更多的代码,让我们真正看到问题。
https://stackoverflow.com/questions/29664711
复制相似问题