Почему дополнительный слой LSTM дает плохие результаты, чем обычная модель LSTM? - PullRequest
1 голос
/ 21 апреля 2020

Я создаю модель 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 функций цены акций, и я пытаюсь предсказать цены акций

1 Ответ

0 голосов
/ 25 апреля 2020

Добавление большего количества компонентов в нейронную сеть не обязательно означает, что вы собираетесь улучшить более простые модели в своей задаче. Такие вещи рассматриваются как проектные решения (например, настройка гиперпараметров ), которые необходимо экспериментировать с вашей задачей, и набор данных, чтобы в конечном итоге найти оптимальные решения.

На самом деле, добавив больше модулей ( как и вторая сеть LSTM, которую вы только что добавили), вы увеличиваете параметры модели, которые должны быть обучены, - вам также придется уделять больше времени своей сети для обучения. Когда количество параметров модели становится большим, модель усложняется, и ей трудно подстраиваться под учебные экземпляры, поскольку ей необходимо оптимизировать параметры таким образом, чтобы они оптимально подходили учебным экземплярам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...