为什么LSTM不能减少损失

时间:2018-10-08 17:47:59

标签: tensorflow keras lstm lm stock

我正在使用lstm训练模型来预测股价,我使用了如下的多对一模式:

                                    O 
                                    | 
                              O O O O 
                              | | | | 
                              O O O O 

并且我使用keras框架来构建网络,但是似乎无法轻松构建NN ...

这是我的python的lstm NN源代码:

def lstm_rls(num_in,num_out=1, batch_size=128, step=1,dim=1):
    model = Sequential()

    model.add(LSTM(
        1024,
        input_shape=(step, num_in),
        return_sequences=True))
    model.add(Dropout(0.2))

    model.add(LSTM(
        512,
        return_sequences=False))
    model.add(Dropout(0.2))

    model.add(Dense(1))
    model.add(Activation('linear'))
    model.compile(loss='mse', optimizer='rmsprop')
    return model

我训练了大约512个纪元,但损失始终在7个纪元左右

  

第1/512页

     

3968/3968 [==============================]-4s 978us / step-损耗:48.6274

     

Epoch 2/512

     

3968/3968 [==============================]-1秒220us / step-损耗:11.1913

     

Epoch 3/512

     

3968/3968 [==============================]-1秒221us / step-损耗:6.8059

     

Epoch 4/512

     

3968/3968 [==============================]-1秒220us / step-损耗:6.7905

     

Epoch 5/512

     

3968/3968 [==============================]-1秒221us / step-损耗:6.8151

     

Epoch 6/512

     

3968/3968 [==============================]-1秒219us / step-损耗:6.7907

     

Epoch 7/512

     

3968/3968 [==============================]-1秒220us / step-损耗:6.8060

     

Epoch 8/512

     

3968/3968 [==============================]-1秒221us / step-损耗:6.7824

... ... ...

  

Epoch 509/512

     

3968/3968 [==============================]-1秒222us / step-损耗:6.7807

     

Epoch 510/512

     

3968/3968 [==============================]-1秒223us / step-损耗:6.8199

     

Epoch 511/512

     

3968/3968 [==============================]-1秒222us / step-损耗:6.7726

     

Epoch 512/512

     

3968/3968 [==============================]-1秒222us / step-损耗:6.7715

2 个答案:

答案 0 :(得分:1)

我在图像字幕方面遇到了问题(我有四个Gpu tesla k20)。训练LSTM需要很长时间(大约几天)。我认为您的问题很自然。我使用的一种方法是增加批量大小。另一方面,批量大小的增加与性能和内存使用量有关。

答案 1 :(得分:0)

今天我看了一场关于调试技巧的讲座。它说,分析代码的一种方法是: 验证目标函数是否在较小的训练集上减少,而不是第一次出现。