【问题标题】:Unormalize an normalized output归一化和归一化输出
【发布时间】:2023-03-30 17:58:01
【问题描述】:

我目前正在处理一个 NN 问题,其中我将输入映射到输出。

我已经对输入和输出进行了标准化,使它们在相同的范围内 => -1 到 1,并且我可以使用 tanh 作为激活函数。

我似乎从训练中得到了相当不错的结果,val_loss = 0.0156。

但要实际使用数据集,我必须对输出进行非标准化,这使得它与实际输出大不相同。

我对 NN 很陌生,但是通常会进行非规范化吗?如果不?那么这些问题是如何解决的呢?

我目前正在使用 min-max 标准化进行标准化,并且由于我存储了最大值和最小值,因此我使用它们来返回值。

有关数据的更多信息:

数据集由stft 音频文件组成,输出是一个特征向量(mfcc)。 由于 stft 给了我复数,但由于 keras 无法处理复数,我将实部和虚部分开,并将它们连接起来。

【问题讨论】:

  • 你能解释一下输出是什么吗?是二分类问题吗?输入的归一化通常已经完成,但对于输出却没有
  • 我不明白,你想恢复原始值并有用于标准化的最小值和最大值,那么问题是什么?
  • 我已经添加了一些关于输出的信息。这里的问题是,随着我对其进行标准化,错误会增加。
  • 是否有可能在 keras 中加入非规范化步骤,这样当它更新权重或计算损失时,它将基于非规范化输出与实际输出而不是它比较归一化的实际输出与归一化的输出。

标签: neural-network normalization keras


【解决方案1】:

您可以使用lambda layer 作为网络本身的一部分来执行非规范化步骤。

假设您可以定义一个归一化函数:

f = K.function(/* some function */)

而你当前的模型是:

model = Sequential()
model.add(Dense(1000, input_dim=1000))
model.add(Dense(1000))

您可以通过以下方式标准化输出:

model = Sequential()
model.add(Dense(1000, input_dim=1000))
model.add(Dense(1000))
model.add(Lambda(lambda x: f(x))

【讨论】:

  • 基本上我想在 numpy.ndarray 上应用一个函数。我猜你对lambda层的使用是对的……关于如何使用它的信息似乎并不多……有没有简单的使用方法?
猜你喜欢
  • 2020-09-08
  • 2018-03-28
  • 2015-07-02
  • 1970-01-01
  • 2016-08-18
  • 1970-01-01
  • 2016-03-19
  • 2017-09-12
  • 2020-10-23
相关资源
最近更新 更多