如何在MATLAB中使用自定义神经网络函数进行图像

时间:2017-09-13 08:50:35

标签: matlab machine-learning neural-network

我必须在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

2 个答案:

答案 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架构就足够了。