【问题标题】:Regression LSTM output values centering around the range of the labels以标签范围为中心的回归 LSTM 输出值
【发布时间】:2021-08-16 08:44:28
【问题描述】:

我的问题特别是我的输出值在标签的最小值和最大值之间。

(即:标签范围 = min(0.20) max(0.80),输出 = 始终在 0.40 左右,偏差很小)

我的模型规格是这样的:

activations = All tanh, or all Relu.    
outputs = 1, inputs = 2, "cells" = 100, layers = 1.  
regularization = either L2 or L1.   
optimizer = SGD with momentum.

(自定义模型,不是从任何库构建的)

我的模型基于此模型:https://medium.com/@aidangomez/let-s-do-this-f9b699de31d9

无论我执行多少个 epoch,输出都以标签范围为中心。 (它在大约 1000 个 epoch 时达到这个状态,并且一直保持到 200000 个 epoch。此时误差达到某个小值(1000 个 epoch,在我的情况下,误差达到 0.00135 左右)并在剩余时间内停留在这里,减少到速度非常缓慢,甚至最终会增加)。我的学习率越小,达到这个范围值和误差值所需的时间就越长。但没有任何改进。

我知道网络可能不够“智能”。但是如果我使用 2 层而不是 1 层,则会出现相同的结果。 但除此之外,还有什么可能导致这种情况?只是寻找指针,我不要求完整的模型评估。如果有人想深入了解代码,我很乐意提供。

【问题讨论】:

    标签: python c++ neural-network lstm recurrent-neural-network


    【解决方案1】:

    很难确定地回答这个问题,但我建议您检查两件事。当您说"cells": 100 时,您指的是您的细胞状态大小吗?因为对于如此小的输入大小,您可能希望首先将其减少到 10。如果您指的是使用 100 个 LSTM 单元,那么这太多了,从一个开始。

    对于第二件事,您提到您使用的是所有 ReLu 或所有 tanh 激活,这是在门输出内部还是在单元输出外部?如果它是内部的,那么这是不正确的,因为选择激活函数是为了它们的门的目的,所以请确保你的门使用以下激活:

    • 输入激活:tanh
    • 输入门:sigmoid
    • 忘记门:sigmoid
    • 输出门:sigmoid

    如果在另一种情况下,您指的是在单元输出上使用激活,或者您正在对输出应用完全连接的尾部,请尝试在网络输出上换成 sigmoid 函数。

    【讨论】:

    • 非常感谢!我会做出这些调整:)
    • 澄清:“细胞”是 LSTM 细胞或“展开的细胞”。激活在内部和输出中使用。在我制作的其他一些模型上,这似乎比传统的效果更好,但现在我有疑问了。感谢您向我指出这一点:)
    猜你喜欢
    • 1970-01-01
    • 2020-06-03
    • 2021-12-26
    • 2016-06-16
    • 2016-07-10
    • 2020-08-27
    • 2015-07-22
    • 2018-10-18
    • 2019-11-10
    相关资源
    最近更新 更多