【问题标题】:Why extra LSTM layer is getting bad results than normal LSTM model?为什么额外的 LSTM 层比普通 LSTM 模型的结果差?
【发布时间】:2020-08-04 13:15:50
【问题描述】:

我正在创建一个 Keras 模型。我正在尝试变化。 那是我的第一个模型:

es = EarlyStopping(monitor='val_loss')
model = Sequential()
model.add(LSTM(100,input_shape=(TIME_STEPS,11), dropout=0.0,
               recurrent_dropout=0.0, kernel_initializer='random_uniform'
              ))
model.add(Dropout(0.25))
#######model.add(LSTM(64))
model.add(Dense(15, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='mean_squared_error', optimizer=kr.optimizers.rmsprop(0.01),
              metrics=[tf.keras.metrics.BinaryAccuracy()])

csv_logger = kr.callbacks.CSVLogger('sonuclar.log')

history = model.fit(x_train,  #train girdiler
                    y_train,  #train çıktılar
                    epochs=150,
                    verbose=2,
                    batch_size=BATCH_SIZE,
                    shuffle=False,
                    validation_data=(x_test1,
                                     y_test1),
                    callbacks=[EarlyStopping(monitor='val_loss', patience=21),
             ModelCheckpoint(filepath='best_model.h5', monitor='val_loss', save_best_only=True)])

而且这个模型只有 1 个 Lstm 层和 2 个密集层。那是我的损失结果:

.
.
.
Epoch 99/150
 - 0s - loss: 8.0949e-04 - binary_accuracy: 4.9048e-04 - val_loss: 3.7912e-04 - val_binary_accuracy: 4.8986e-04
Epoch 100/150
 - 0s - loss: 7.9101e-04 - binary_accuracy: 4.9053e-04 - val_loss: 9.9216e-05 - val_binary_accuracy: 4.8991e-04
Epoch 101/150
 - 0s - loss: 6.8317e-04 - binary_accuracy: 4.9057e-04 - val_loss: 3.0611e-04 - val_binary_accuracy: 4.8996e-04
Epoch 102/150
 - 0s - loss: 9.5524e-04 - binary_accuracy: 4.9061e-04 - val_loss: 7.6808e-05 - val_binary_accuracy: 4.9000e-04
Epoch 103/150
 - 0s - loss: 6.7897e-04 - binary_accuracy: 4.9065e-04 - val_loss: 2.7978e-04 - val_binary_accuracy: 4.9005e-04
Epoch 104/150
 - 0s - loss: 5.9103e-04 - binary_accuracy: 4.9069e-04 - val_loss: 6.1831e-04 - val_binary_accuracy: 4.9009e-04
Epoch 105/150
 - 0s - loss: 8.2365e-04 - binary_accuracy: 4.9072e-04 - val_loss: 6.4325e-05 - val_binary_accuracy: 4.9014e-04
Epoch 106/150
 - 0s - loss: 7.1716e-04 - binary_accuracy: 4.9076e-04 - val_loss: 1.0926e-04 - val_binary_accuracy: 4.9018e-04
Epoch 107/150
 - 0s - loss: 6.5435e-04 - binary_accuracy: 4.9080e-04 - val_loss: 2.2587e-04 - val_binary_accuracy: 4.9022e-04
Epoch 108/150
 - 0s - loss: 7.6734e-04 - binary_accuracy: 4.9083e-04 - val_loss: 7.6250e-05 - val_binary_accuracy: 4.9026e-04
Epoch 109/150
 - 0s - loss: 6.4531e-04 - binary_accuracy: 4.9087e-04 - val_loss: 5.4440e-04 - val_binary_accuracy: 4.9030e-04
Epoch 110/150
 - 0s - loss: 7.2096e-04 - binary_accuracy: 4.9091e-04 - val_loss: 8.7251e-05 - val_binary_accuracy: 4.9034e-04
Epoch 111/150
 - 0s - loss: 7.3333e-04 - binary_accuracy: 4.9094e-04 - val_loss: 2.8440e-04 - val_binary_accuracy: 4.9038e-04
Epoch 112/150

如果我尝试使用第二个 Lstm 层,这个模型在预测股票价格方面应该比以前的模型更智能,但是这个代码:

es = EarlyStopping(monitor='val_loss')
model = Sequential()
model.add(LSTM(100,input_shape=(TIME_STEPS,11), dropout=0.0,
               recurrent_dropout=0.0, kernel_initializer='random_uniform'
              ,return_sequences=True))
model.add(Dropout(0.25))
model.add(LSTM(64))
model.add(Dense(15, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='mean_squared_error', optimizer=kr.optimizers.rmsprop(0.01),
              metrics=[tf.keras.metrics.BinaryAccuracy()])

csv_logger = kr.callbacks.CSVLogger('sonuclar.log')

history = model.fit(x_train,  #train girdiler
                    y_train,  #train çıktılar
                    epochs=150,
                    verbose=2,
                    batch_size=BATCH_SIZE,
                    shuffle=False,
                    validation_data=(x_test1,
                                     y_test1),
                    callbacks=[EarlyStopping(monitor='val_loss', patience=21),
             ModelCheckpoint(filepath='best_model.h5', monitor='val_loss', save_best_only=True)])

训练结果比以前的模型差。这不能过拟合,因为我不使用预测。为什么第二个模型比第一个模型差。 最后一个,我的数据集有 15 个股票价格特征,我正在尝试预测股票价格

【问题讨论】:

  • 嗨@oğuz bozkurt,请提供最少的可重现代码,如果可能的话,请提供您使用的数据集。

标签: python tensorflow keras deep-learning artificial-intelligence


【解决方案1】:

向神经网络添加更多组件并不一定意味着您将在任务中改进更简单的模型。此类事情被视为您需要对任务进行试验的设计决策(如超参数设置),以及最终找到最佳决策的数据集。

实际上,通过添加更多模块(例如您刚刚添加的第二个 LSTM 网络),您正在增加必须训练的模型参数——而且,您将不得不为您的网络提供更多时间来进行训练。当模型参数的数量越来越多时,模型会变得更加复杂,很难适应训练实例,因为它需要以一种可以最佳拟合训练实例的方式优化参数。

【讨论】:

    猜你喜欢
    • 2020-11-26
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多