【问题标题】:Normalization of inputs of a feedforward Neural network前馈神经网络输入的归一化
【发布时间】:2015-12-23 03:02:56
【问题描述】:

假设我有一个时间序列信号的不同特征的 mxn 矩阵(第 1 列代表最后 n 个样本的线性回归,第 2 列代表最后 n 个样本的平均值,第 3 列代表 a不同的时间序列但相关的信号等)。我应该如何规范这些输入?所有输入都属于不同的类别,因此它们具有不同的范围。一个范围从 0,1,另一个范围从 -5 到 50,等等。

我应该标准化整个矩阵吗?或者我应该分别对每组输入进行标准化吗?

注意:我通常使用 MATLAB 中的 mapminmax 函数进行归一化。

【问题讨论】:

  • 那么,预期输出中列的范围必须是多少?
  • 目标是二进制输出...所以我将输出视为概率。具体来说,输出是-1或1。所以输入的范围应该在-1和1之间。但我仍然不确定是否应该标准化整个矩阵,或者每个向量一个一个...或者这两个等价?
  • 如果您要在每一列中查找范围[-1,1],只需执行(round(mapminmax(A.',0,1).')*2)-1

标签: matlab neural-network normalization feed-forward


【解决方案1】:

您应该单独标准化矩阵的每个向量/列,它们代表不同的数据类型,不应混淆在一起。

例如,您可以转置矩阵以在行中而不是在矩阵的列中包含 3 种不同的数据类型,并且仍然使用 mapminmax:

A = [0 0.1 -5; 0.2 0.3 50; 0.8 0.8 10; 0.7 0.9 20]; 
A =
         0    0.1000   -5.0000
    0.2000    0.3000   50.0000
    0.8000    0.8000   10.0000
    0.7000    0.9000   20.0000

B = mapminmax(A')
B =
   -1.0000   -0.5000    1.0000    0.7500
   -1.0000   -0.5000    0.7500    1.0000
   -1.0000    1.0000   -0.4545   -0.0909

【讨论】:

  • 那么通过转置矩阵,函数mapminmax会自动对每个向量进行单独归一化,而不是混合数据进行归一化?
  • 是的,matlab documentation for mapminmax 中是这样说的。我很快检查了上面的小例子。
  • 我明白了……好的,谢谢。 PS由于Matlab在创建带有前馈的网络时会自动调用mapminmax,所以我不需要手动规范化输入吗? (基本上只是转置矩阵的问题?)
  • @LuisCruz 是的,我会说。如果手册说它调用 mapminmax 与您提供的相同输入。
【解决方案2】:

您应该独立地标准化每个特征

第 1 列代表最后 n 个样本的线性回归,第 2 列代表最后 n 个样本的平均值,第 3 列代表不同时间序列但相关信号的局部最大值等

我不能确定您的具体问题,但一般来说,您应该独立地规范化每个特征。所以标准化第 1 列,然后第 2 列等等。

我应该标准化整个矩阵吗?还是应该分别对每组输入进行标准化?

我不确定你在这里的意思。什么是输入?如果你的意思是一个实例(矩阵的一行),那么不,你不应该单独规范行,而是列。

我不知道您将如何在 Matlab 中执行此操作,但我将您的问题更多地视为理论问题而不是实现问题。

【讨论】:

  • 是的,确实是个理论问题。太棒了,所以我会独立地将它们标准化。谢谢!
【解决方案3】:

如果您希望在每列中归一化的所有列的范围为[0,1],您可以像这样使用mapminmax(假设A 作为二维输入数组)-

out = mapminmax(A.',0,1).'

您也可以将bsxfun 用于相同的输出,就像这样 -

Aoffsetted = bsxfun(@minus,A,min(A,[],1))
out = bsxfun(@rdivide,Aoffsetted,max(Aoffsetted,[],1))

示例运行 -

>> A
A =
     3     7     4     2     7
     1     3     4     5     7
     1     9     7     5     3
     8     1     8     6     7
>> mapminmax(A.',0,1).'
ans =
      0.28571         0.75            0            0            1
            0         0.25            0         0.75            1
            0            1         0.75         0.75            0
            1            0            1            1            1
>> Aoffsetted = bsxfun(@minus,A,min(A,[],1));
>> bsxfun(@rdivide,Aoffsetted,max(Aoffsetted,[],1))
ans =
      0.28571         0.75            0            0            1
            0         0.25            0         0.75            1
            0            1         0.75         0.75            0
            1            0            1            1            1

【讨论】:

  • 那么推荐的方法是对整个矩阵进行归一化?不是每个向量(列)都一一对应?
  • @LuisCruz 啊抱歉,我不熟悉Neural network。因此,我不确定对您的 NN 工作有什么建议,我只能帮助您获得预期的输出。
猜你喜欢
  • 2018-09-10
  • 2018-10-20
  • 2018-03-26
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
  • 1970-01-01
  • 2015-06-04
  • 1970-01-01
相关资源
最近更新 更多