【问题标题】:Interpreting outputs of my neural network解释我的神经网络的输出
【发布时间】:2015-06-08 08:53:39
【问题描述】:

我尝试在matlab中训练一个神经网络,首先我构建了如下的ANN

net = feedforwardnet([30 20 20 ]);
[net ,tr] = train(net , XTRAIN , temp); 

生成具有以下架构的 ANN:

然后我按如下方式测试我的神经网络

outputsOfTest = sim(net , XTEST);

outputsOfTest 是表示神经网络测试输出的向量,通常outputsOfTest 的一些元素是负值,例如outputsOfTest 会是这样的[-.34 1.17 .17]


那么如何解释这个输出呢?负值表示什么?基于此输出,测试数据将属于哪一类?

  1. 我是否应该将最大值作为测试数据所属类别的指标?
    例如如果我有输出向量[-2 .5 1],其中最大值是1,那么测试数据所属的类是3类
  2. 我应该取最大值(取绝对值)吗?
    例如,如果我有输出向量 [-2 .5 1] ,它的大小中的最大值是第一个元素,那么测试数据所属的类是类 1。

注意:有时outputsOfTest的元素之和超过1,元素之和可能达到2.5,这正常吗?

【问题讨论】:

标签: matlab machine-learning neural-network


【解决方案1】:

您的输出层似乎具有线性激活函数。因此,您的输出向量分量的值不限于 0 和 1 之间。对于分类,您应该使用 softmax 激活函数:

(Source)
softmax 的使用导致向量分量的值介于 0 和 1 之间,并且每个向量的总和为 1。所以基本上你得到了你的类的概率分布。 Matlab help 有一张显示效果的图片(左输入,softmax 之后):

UFDL Tutorial中有更多关于它的信息。

据我所知,以下代码更改可能在 Matlab 中有效:

net = feedforwardnet([30 20 20]);
net.layers{4}.transferFcn='softmax';
[net ,tr] = train(net , XTRAIN , temp); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 2018-11-26
    • 1970-01-01
    • 2020-03-15
    相关资源
    最近更新 更多