0

我的项目是识别古钱币。我正在使用 Matlab。我已经有一个包含输入和输出的功能文件。我已经使用 newff 训练了 3 种类型的硬币,并且已经保存了 net。对于三种类型的硬币,我使用 01、10 和 11 作为目标。现在我想用那个训练有素的网络进行测试。我也有测试图像。我这样编码:

load net.mat;
load features.mat;
testInputs = Features';
out = sim(net,testInputs);
[dummy, I]=max(out);

的值I用于检查硬币类型。如果I是 1 则输入 1,如果是 2,则输入 2,如果是 3,则输入 3。我正确吗?我对这些 1、2、3 值进行了硬编码,因为我将目标指定为 01、10 和 11。

if (I == 2)
    fprintf('Type1\n');
elseif (I == 1)
    fprintf('Type2\n');
elseif (I == 3)
    fprintf('Type3\n');
else
    fprintf('undefined\n');
end

虽然现在我输入了 3 种类型的测试硬币图像,但它的 value 显示为 1 或 2 I。但不是 3。即使我使用用于训练的同一组图像,它也会给出 1 或 2 的值I

你能帮帮我吗?

4

1 回答 1

0

max() 的第二个参数将为您提供具有更高输出的神经元的索引。如果您只有两个神经元,如果您的目标是 [0,1]、[1,0] 和 [1,1](请注意每个目标上只有两个元素),则无法获得 3超出最大值()。您应该尝试 [0,0,1]、[0,1,0] 和 [1,0,0]。

附带说明一下,如果您使用 tansig 作为神经元的激活函数,请考虑在目标上使用 -1 而不是 0,这样您可以更好地利用非线性。类似于 [-1,-1,1]、[-1,1,-1]、[1,-1,-1]。

于 2011-03-18T01:18:05.160 回答