Python 为什么额外的LSTM层比正常的LSTM模型效果差?

Python 为什么额外的LSTM层比正常的LSTM模型效果差?,python,tensorflow,keras,deep-learning,artificial-intelligence,Python,Tensorflow,Keras,Deep Learning,Artificial Intelligence,我正在创建一个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' )) mod

我正在创建一个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个股票价格特征,我正在尝试预测股票价格

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


实际上,通过添加更多的模块(如刚才添加的第二个LSTM网络),您增加了需要训练的模型参数–而且,您必须给网络更多的时间进行训练。当模型参数的数量越来越大时,模型变得更加复杂,难以在训练实例上进行拟合,因为它需要以能够最佳拟合训练实例的方式优化参数

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


实际上,通过添加更多的模块(如刚才添加的第二个LSTM网络),您增加了需要训练的模型参数–而且,您必须给网络更多的时间进行训练。当模型参数的数量越来越大时,模型变得更加复杂,难以在训练实例上进行拟合,因为它需要以能够最佳拟合训练实例的方式优化参数

Hi@oğuz bozkurt,请包括最小可复制代码和您使用的数据集(如果可能)。Hi@oğuz bozkurt,请包括最小可复制代码和您使用的数据集(如果可能)。