【问题标题】:Matlab - Use trained net for testingMatlab - 使用训练有素的网络进行测试
【发布时间】:2012-01-13 02:56:25
【问题描述】:

我的项目是识别古钱币。我正在使用 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 种类型的测试硬币图像,但对于值 I,它要么显示 1 要么显示 2。但不是 3。即使我使用用于训练的同一组图像,它也会为值 I 提供 1 或 2。

你能帮帮我吗?

【问题讨论】:

  • 查看权重矩阵(我忘了如何访问它)并确保您的网络没有以零作为第三个权重的局部最小值。
  • 我是 matlab 新手。你能再解释一下吗?我无法理解你上面所说的。当我训练我的数据集时,对于 3 种类型的硬币,我将 [0,1]、[1,0] 和 [1,1] 作为目标。我不能这样给吗?训练后,当我将训练数据与我使用的测试图像进​​行比较时,out = sim(net,testInputs); [假人,我]=max(out);然后 if (I == 2) fprintf('Type1\n'); elseif (I == 1) fprintf('Type2\n'); elseif (I == 3) fprintf('Type3\n');否则 fprintf('未定义\n');结尾。这是不正确的吗?我总是返回 1 或 2。
  • 权重矩阵包含各个单元之间连接的“强度”。如果您对此不熟悉,您应该阅读 Matlab 文档。然后,您可以看到第三个单元的输入在多大程度上影响了结果。
  • Matlab threaddocumentation。抱歉,另一张的编辑时间已用完。
  • 没关系。非常感谢。我会过去的。

标签: matlab neural-network sim-card


【解决方案1】:

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]。

【讨论】:

    猜你喜欢
    • 2018-09-19
    • 2014-02-24
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    • 2017-08-14
    • 2010-11-20
    • 1970-01-01
    • 2015-06-09
    相关资源
    最近更新 更多