我必须在Matlab中制作一个简单的3层神经网络(2-10-2)。
我参与了Matlab中的卷积神经网络,并希望将其与简单的神经网络架构进行比较。
每个类有14000个图像,输入有两个类,输出有两个类。输入图像大小为56x56 = 3136 1)如何制作2-10-2 NN架构。
2)我的图像也是RGB,所以它的56x56x3
因此输入矩阵将是9408?如果是两个类,则在输入x
中。对于每个类,x1的大小为3161x700,x2的大小为9408x700,x
输入的最终大小为9408x1400
,标签为1x1400
?
答案 0 :(得分:1)
如果您查看feedforwardnet 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)
这几乎就是你想要的。 feedforwardnet可以采用不同隐藏图层大小的数组,因此我们可以这样做:
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)
答案 1 :(得分:-3)
对于2类分类问题,单输出逻辑神经元就足够了。 (2-10-1)的NN架构就足够了。