我目前正在处理NN问题,我将输入映射到输出。
我已将输入和输出标准化,使它们处于相同的范围内=> -1到1,这样我就可以使用tanh作为激活函数。
我似乎从训练中得到了相当不错的结果,val_loss = 0.0156。
但是要实际使用数据集,我必须对输出进行非规范化,这使得它与实际输出非常不同。
我对NN很陌生,但通常是非正常化吗?如果不?这些问题如何解决?
我目前正在使用min-max正规化进行规范化,并且由于我存储了max和min值,因此我使用它们来返回值。
有关数据的更多信息:
数据集由stft个音频文件组成,输出是一个特征向量(mfcc)。 由于stft给了我复杂的价值,但由于keras无法处理复数,我分裂了实部和虚部,并将它们连成一致。
答案 0 :(得分: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))