神经网络输出结果从一开始就是一条直线

为什么我的神经网络输出结果会是一条直线?我认为我的数据应该没有什么问题。
以下是我构建的LSTM模型,我发现无论我怎么初始化,它在最初时输出的结果总是几乎一致的,或者说波动非常小,比如[0.1358,0.1357,0.1358,0.1357,0.1356,……],也许是我的forward写错了吗?
并且在训练后仍然是一条接近水平的直线,我想知道这是为什么。

class RegLSTM(nn.Module):
    def __init__(self,input_size, hidden_size, hidden_num_layers):
        super(RegLSTM, self).__init__()
        self.lstm = nn.LSTM(input_size, hidden_size, hidden_num_layers)
        self.reg = nn.Sequential(
            nn.Linear(hidden_size, 1)
        )
        self.init_weights()
    def init_weights(self):
        for name, param in self.lstm.named_parameters():
            if 'weight' in name:
                nn.init.normal_(param, std=0.1)
            elif 'bias' in name:
                nn.init.constant_(param, 0.0)
    def forward(self, x):
        x, (ht,ct) = self.lstm(x)
        seq_len, batch_size, hidden_size= x.shape
        x = x.view(-1, hidden_size)
        x = self.reg(x)
        x = x.view(seq_len, batch_size, -1)
        return x


该回答引用GPTᴼᴾᴱᴺᴬᴵ
可能有几种原因导致你的神经网络输出一条直线:

  1. 数据问题:你说你认为数据应该没有什么问题,但是很可能数据确实存在问题。例如,如果你的数据集中只有一个类别的样本,那么分类问题的输出可能是一条直线。

  2. 参数初始化问题:你的权重初始化的方式是随机初始化的,但如果权重太小或太大,都可能导致网络无法学习到有意义的特征。你可以尝试改变初始化权重的方式,比如使用xavier初始化。

  3. 学习率问题:如果学习率设置得过高或者过低,都会导致训练困难。你可以尝试调整学习率,找到最合适的值。

  4. 训练数据量问题:如果你的数据量太小,那么训练出来的模型可能无法很好地泛化。你可以尝试增加训练数据量。

  5. 模型结构问题:你的模型可能过于简单,无法很好地拟合数据。你可以尝试增加模型的层数或者神经元个数,或者换用其他的神经网络结构。

关于你的forward函数,从代码上看似乎没有什么问题。你可以仔细检查一下数据集和其他超参数,尝试调整它们,看看是否能够解决你的问题。

说明你的参数选择的不太好,或者激活函数的问题。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^