如果您查看前馈网络MATLAB help page,就会看到这个例子:
[x,t] = simplefit_dataset;
net = feedforwardnet(10);
net = train(net,x,t);
view(net)
y = net(x);
perf = perform(net,y,t)
这几乎就是你想要的。前馈网络可以采用不同隐藏层大小的数组,所以我们可以这样做:
net = feedforwardnet([2 10 2]);
得到你想要的架构。您无需担心输入层大小或输出层大小。这些设置为“0”,并根据您在训练期间提供给网络的输入和输出(示例中为net)自动设置为正确的大小。在您的情况下,您可以将 56x56 矩阵重塑为 3136x1 向量:
x = reshape(x,3161,1);
因此,按照上面的示例,请确保您的类/目标标签位于 t 中,并且您的相应输入位于 x 中,然后您就可以开始了。
话虽如此,我不会使用这些网络之一对图像进行分类。 ConvNets 通常是要走的路。
要将输入数据(x 和 t)拆分为训练集、验证集和测试集,并让训练函数自动处理这样的泛化能力,请在训练之前执行以下操作:
net.divideFcn = 'dividerand';
net.divideParam.trainRatio = 0.7;
net.divideParam.valRatio = 0.15;
net.divideParam.testRatio = 0.15;
综合起来,我们有:
[x,t] = simplefit_dataset;
net = feedforwardnet(10);
net.divideFcn = 'dividerand';
net.divideParam.trainRatio = 0.7;
net.divideParam.valRatio = 0.15;
net.divideParam.testRatio = 0.15;
net = train(net,x,t);
view(net)
y = net(x);
perf = perform(net,y,t)