我必须在 Matlab (2-10-2) 中制作一个简单的 3 层神经网络。
我曾在 Matlab 中研究卷积神经网络,并希望将其与简单的神经网络架构进行比较。
我每个类有 14000 张图像,输入端有两个类,输出端有两个类。输入处的图像大小为 56x56=3136。
1)如何制作2-10-2 NN架构。
2)我拥有的图像也是RGB,所以它的56x56x3
,所以输入矩阵将是9408?关于输入x
如果两个类。对于每个类,x1 的大小为 3161x700,x2 的大小为 9408x700,x
输入的最终大小为9408x1400
,标签将1x1400
?
如果你看一下feedforwardnet MATLAB帮助页面,就会发现这个例子:
[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
,您就可以开始了。
话虽如此,我不会在这些网络之一对图像进行分类。卷积神经网络通常是要走的路。
要将输入数据(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)
对于 2 类分类问题,单个输出逻辑神经元就足够了。 (2-10-1) 的 NN 架构就足够了。