Как возместить убытки в задаче LSTM - PullRequest
0 голосов
/ 04 августа 2020
import tensorflow as tf
from tensorflow.keras import models
from tensorflow.keras import layers

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt

df = pd.read_csv('./data/600998.csv', encoding='gbk', index_col='日期')
df = df[df['最高价'] > 0]
df = df.sort_values(by='日期', ascending=True)

data_set = df.values

ratio = 0.8
train_size = int(ratio * len(data_set))
train_data = data_set[:train_size]
test_data = data_set[train_size:]


def create_date(data):
    window = 5
    x, y = [], []
    for i in range(len(data) - window - 1):
        x.append(data[i:(i + window)])
        y.append(data[i + window + 1])
    return np.array(x, dtype=np.float32), np.array(y, dtype=np.float32)


train_x, train_y = create_date(train_data)
test_x, test_y = create_date(test_data)

# could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR 出现这个错误用以下语句
gpus = tf.config.list_physical_devices('GPU')
tf.config.experimental.set_memory_growth(gpus[0], True)

model = models.Sequential()
model.add(tf.compat.v1.keras.layers.CuDNNLSTM(100))
model.add(layers.Dense(110, activation='relu'))
model.add(layers.Dense(110, activation='relu'))
model.add(layers.Dense(1))
model.compile(loss='mae', optimizer='adam')

early_stopping = tf.keras.callbacks.EarlyStopping(monitor='val_loss',patience=10, mode='min')

history = model.fit(train_x, train_y, epochs=35, batch_size=20, validation_split=0.2)

loss = history.history['loss']
val_loss = history.history['val_loss']

epochs = range(1, len(loss) + 1)

# plt.plot(epochs, loss, 'bo', label='train_loss')
# plt.plot(epochs, val_loss, 'b', label='val_loss')
# plt.legend()
# plt.show()


pre = model.predict(test_x)
pre = np.array(pre)
plt.plot(test_y, 'bo', label='train_acc')
plt.plot(pre, 'b', label='val_acc')

pre = tf.expand_dims(pre, 1)
test_y = tf.expand_dims(test_y, 1)

loss = model.evaluate(pre, test_y, verbose=0)

print(loss)

Я использую последние 5 дней для предсказания 6-го дня.

Я хочу уменьшить потери, это слишком много.

Я пытаюсь добавить 4 слоя Dense, но это не очень хорошо

Я пытаюсь добавить 2 LSTM, это тоже нехорошо

Как уменьшить потери, чтобы они соответствовали данным.

Следует ли мне изменить функцию потерь? (Я думаю, что это плохо idea)

это проблема моего алгоритма или проблема с данными?

тензорная доска

8/8 [==============================] - 2 с 288 мс / step - потеря: 13.9792 - val_loss: 10.8878 Эпоха 2/40

8/8 [========================== ====] - 0 с 4 мс / шаг - потеря: 11,5460 - val_loss: 7,4250 Эпоха 3/40

8/8 [================== ============] - 0 с 10 мс / шаг - потеря: 6,7420 - val_loss: 0,4494 Эпоха 4/40

8/8 [========== ====================] - 0 с 4 мс / шаг - потеря: 2.0952 - val_loss: 4.0663 Эпоха 5/40

8/8 [== ============================] - 0 с 4 мс / шаг - потеря: 1,2778 - val_loss: 0,7698 Эпоха 6/40

8/8 [==============================] - 0 с 4 мс / шаг - потеря: 1.1560 - val_loss: 2.3522 Эпоха 7/40

8/8 [==============================] - 0 с 4 мс / шаг - убыток: 0.9600 - val_loss: 1.7921 Эпоха 8/40

8/8 [============================ ==] - 0 с 4 мс / шаг - потеря: 0,9242 - val_loss: 1,7912 Эпоха 9/40

8/8 [==================== ==========] - 0 с 4 мс / шаг - потеря: 0,8942 - val_loss: 1,9513 Эпоха 10/40

8/8 [==============================] - 0 с 4 мс / шаг - потеря: 0,8942 - val_loss: 1,8844 Эпоха 11/40

8/8 [==============================] - 0 с 4 мс / шаг - потеря: 0.8715 - val_loss: 1.6934 Эпоха 12/40

8/8 [============================== ==] - 0 с 4 мс / шаг - потеря: 0,8678 - val_loss: 1,7870 Эпоха 13/40

8/8 [==================== ==========] - 0 с 4 мс / шаг - потеря: 0,8337 - val_loss: 1,7296 Эпоха 14/40

8/8 [============ ==================] - 0 с 4 мс / шаг - потеря: 0,7961 - val_loss: 1,6749 Эпоха 15/40

8/8 [==== ==========================] - 0 с 4 мс / шаг - потеря: 0,7603 - val_loss: 1,4151 Эпоха 16/40

8/8 [==============================] - 0 с 4 мс / шаг - потеря: 0.7016 - val_loss: 1.2030 Эпоха 17 / 40

8/8 [==============================] - 0 с 4 мс / шаг - потеря : 0.6061 - val_loss: 1.3001 Эпоха 18/40

8/8 [============================== ] - 0 с 4 мс / шаг - потеря: 0,5753 - val_loss: 1,0828 Эпоха 19/40

8/8 [========= =====================] - 0 с 4 мс / шаг - потеря: 0,4711 - val_loss: 0,9737 Эпоха 20/40

8/8 [= =============================] - 0 с 4 мс / шаг - потеря: 0,4640 - val_loss: 0,4332 Эпоха 21/40

8/8 [==============================] - 0 с 4 мс / шаг - потеря: 0,3656 - val_loss: 0,3978 Эпоха 22/40

8/8 [==============================] - 0 с 4 мс / шаг - потеря: 0,4176 - val_loss: 0,6605 Эпоха 23/40

8/8 [=========================== ===] - 0 с 4 мс / шаг - потеря: 0,3661 - val_loss: 0,4203 Эпоха 24/40

8/8 [=================== ===========] - 0 с 4 мс / шаг - потеря: 0,3382 - val_loss: 0,5729 Эпоха 25/40

8/8 [=========== ===================] - 0 с 4 мс / шаг - потеря: 0,3601 - val_loss: 0,5000 Эпох 26/40

8/8 [=== ===========================] - 0 с 4 мс / шаг - потеря: 0,4394 - val_loss: 0,4420 Эпоха 27/40

8/8 [==============================] - 0 с 4 мс / шаг - потеря: 0,4772 - val_loss: 0,3918 эпохи 28/40

8/8 [============================ ==] - 0 с 4 мс / шаг - потеря: 0,4215 - val_loss: 0,4069 Эпоха 29/40

8/8 [==================== ==========] - 0 с 4 мс / шаг - потеря: 0,3493 - val_loss: 0,3944 Эпоха 30/40

8/8 [============ ==================] - 0 с 4 мс / шаг - потеря: 0,3514 - val_loss: 0,4212 Эпоха 31/40

8/8 [==== ==========================] - 0 с 5 мс / шаг - потеря: 0,3653 - val_loss: 0,5602 Эпоха 32/40

8/8 [==============================] - 0 с 4 мс / шаг - потеря: 0,3810 - val_loss: 0,6550 Эпоха 33 / 40

8/8 [==============================] - 0 с 4 мс / шаг - потеря: 0,3579 - val_loss: 0,3963 Эпоха 34/40

8/8 [==============================] - 0 с 4 мс / шаг - потеря: 0,3239 - val_loss: 0,3921 Эпоха 35/40

8/8 [=========================== ===] - 0 с 4 мс / шаг - потеря: 0,3213 - val_loss: 0,5006 Эпоха 36/40

8/8 [=================== ===========] - 0 с 4 мс / шаг - потеря: 0,3311 - val_loss: 0,4357 Эпоха 37/40

8/8 [=========== ===================] - 0 с 5 мс / шаг - потеря: 0,3188 - val_loss: 0,3898 Эпоха 38/40

8/8 [=== ===========================] - 0 с 4 мс / шаг - потеря: 0,3287 - val_loss: 0,4326 Эпоха 39/40

8/8 [==============================] - 0 с 4 мс / шаг - потеря: 0,3035 - val_loss: 0,4365 эпохи 40/40

8/8 [==============================] - 0 с 4 мс / шаг - убыток: 0.3786 - val_loss: 0.4019 6.208383083343506

日期,最高价
2019-12-31,14.2
2019-12-30,13.68
2019-12-27,13.59
2019-12-26,13.67
2019-12-25,13.68
2019-12-24,13.65
2019-12-23,13.8
2019-12-20,13.65
2019-12-19,13.85
2019-12-18,13.63
2019-12-17,13.75
2019-12-16,13.6
2019-12-13,13.45
2019-12-12,13.57
2019-12-11,13.66
2019-12-10,13.74
2019-12-9,13.88
2019-12-6,13.58
2019-12-5,13.3
2019-12-4,13.09
2019-12-3,13.36
2019-12-2,13.45
2019-11-29,13.54
2019-11-28,13.49
2019-11-27,13.39
2019-11-26,13.43
2019-11-25,13.25
2019-11-22,13.2
2019-11-21,13.09
2019-11-20,13.63
2019-11-19,13.44
2019-11-18,13.33
2019-11-15,13.34
2019-11-14,13.55
2019-11-13,13.3
2019-11-12,13.36
2019-11-11,13.6
2019-11-8,13.87
2019-11-7,14.01
2019-11-6,13.9
2019-11-5,13.84
2019-11-4,13.58
2019-11-1,13.39
2019-10-31,13.86
2019-10-30,13.92
2019-10-29,13.95
2019-10-28,13.94
2019-10-25,13.95
2019-10-24,13.87
2019-10-23,13.93
2019-10-22,13.98
2019-10-21,14.46
2019-10-18,14.38
2019-10-17,14.17
2019-10-16,14.27
2019-10-15,14.3
2019-10-14,14.48
2019-10-11,14.4
2019-10-10,14.13
2019-10-9,14.18
2019-10-8,14.22
2019-9-30,14.6
2019-9-27,14.39
2019-9-26,14.36
2019-9-25,14.46
2019-9-24,14.59
2019-9-23,14.83
2019-9-20,14.5
2019-9-19,14.5
2019-9-18,13.96
2019-9-17,13.76
2019-9-16,13.7
2019-9-12,13.83
2019-9-11,13.93
2019-9-10,13.92
2019-9-9,13.74
2019-9-6,13.58
2019-9-5,13.61
2019-9-4,13.64
2019-9-3,13.66
2019-9-2,13.39
2019-8-30,13.58
2019-8-29,13.54
2019-8-28,13.99
2019-8-27,14.8
2019-8-26,14.24
2019-8-23,13.72
2019-8-22,13.55
2019-8-21,13.1
2019-8-20,13.08
2019-8-19,12.94
2019-8-16,12.62
2019-8-15,12.49
2019-8-14,12.77
2019-8-13,12.67
2019-8-12,12.51
2019-8-9,12.76
2019-8-8,12.78
2019-8-7,12.86
2019-8-6,12.52
2019-8-5,12.56
2019-8-2,12.42
2019-8-1,12.45
2019-7-31,12.08
2019-7-30,12.02
2019-7-29,11.98
2019-7-26,12.06
2019-7-25,12.06
2019-7-24,12.15
2019-7-23,12.1
2019-7-22,12.15
2019-7-19,12.21
2019-7-18,12.18
2019-7-17,12.28
2019-7-16,12.32
2019-7-15,12.4
2019-7-12,12.62
2019-7-11,12.76
2019-7-10,12.33
2019-7-9,11.99
2019-7-8,12.26
2019-7-5,12.29
2019-7-4,12.36
2019-7-3,12.44
2019-7-2,12.53
2019-7-1,12.52
2019-6-28,12.43
2019-6-27,12.43
2019-6-26,12.37
2019-6-25,12.62
2019-6-24,12.72
2019-6-21,12.79
2019-6-20,12.81
2019-6-19,12.83
2019-6-18,12.72
2019-6-17,12.83
2019-6-14,12.84
2019-6-13,12.76
2019-6-12,12.86
2019-6-11,12.85
2019-6-10,12.58
2019-6-6,12.76
2019-6-5,12.94
2019-6-4,12.9
2019-6-3,13.08
2019-5-31,13.11
2019-5-30,13.13
2019-5-29,13.29
2019-5-28,13.38
2019-5-27,13.32
2019-5-24,13.59
2019-5-23,13.39
2019-5-22,13.64
2019-5-21,13.78
2019-5-20,14.2
2019-5-17,14.62
2019-5-16,14.65
2019-5-15,14.68
2019-5-14,14.85
2019-5-13,14.96
2019-5-10,15.03
2019-5-9,15.1
2019-5-8,15.3
2019-5-7,15.12
2019-5-6,15.37
2019-4-30,15.9
2019-4-29,16.06
2019-4-26,15.64
2019-4-25,14.89
2019-4-24,15.09
2019-4-23,15.25
2019-4-22,15.27
2019-4-19,15.46
2019-4-18,15.62
2019-4-17,15.85
2019-4-16,15.79
2019-4-15,15.7
2019-4-12,15.75
2019-4-11,16.19
2019-4-10,16.02
2019-4-9,15.84
2019-4-8,16.08
2019-4-4,15.99
2019-4-3,15.88
2019-4-2,16.01
2019-4-1,16
2019-3-29,15.75
2019-3-28,15.68
2019-3-27,15.65
2019-3-26,16.05
2019-3-25,16.25
2019-3-22,16.64
2019-3-21,16.18
2019-3-20,16.31
2019-3-19,16.4
2019-3-18,16.42
2019-3-15,16.67
2019-3-14,16.48
2019-3-13,16.38
2019-3-12,16.58
2019-3-11,16.43
2019-3-8,15.86
2019-3-7,16
2019-3-6,16.08
2019-3-5,15.64
2019-3-4,15.72
2019-3-1,15.55
2019-2-28,15.6
2019-2-27,15.76
2019-2-26,15.88
2019-2-25,15.41
2019-2-22,15
2019-2-21,15.11
2019-2-20,15.23
2019-2-19,15.46
2019-2-18,15.5
2019-2-15,15.41
2019-2-14,15.3
2019-2-13,15.19
2019-2-12,15.25
2019-2-11,14.96
2019-2-1,14.85
2019-1-31,14.6
2019-1-30,14.5
2019-1-29,14.46
2019-1-28,14.54
2019-1-25,14.63
2019-1-24,14.74
2019-1-23,14.7
2019-1-22,14.65
2019-1-21,14.74
2019-1-18,14.57
2019-1-17,14.47
2019-1-16,14.5
2019-1-15,14.47
2019-1-14,14.6
2019-1-11,14.69
2019-1-10,14.65
2019-1-9,14.77
2019-1-8,14.8
2019-1-7,14.73
2019-1-4,14.68
2019-1-3,14.61
2019-1-2,14.64

это мой набор данных

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