繁体   English   中英

使用 Keras LSTM 通过“b”预测“a”

[英]Predict "a" by "b" using Keras LSTM

我正在尝试创建一个模型,从数据“a”中预测数据“b”。
我训练了模型,但是“loss_value”太大了,并没有很好地减少。

这是示例数据

a = [81,61,192,71,66,433,378,449,484...] 
b = [2140,1782,1458,1228,1100,1015,768,1013,912,...]

我使用“create_datasheet”函数将数据转换为 3D 数组值(value_count、time_stamp、factors)并在我的模型中插入值

【函数输出示例】

x , y = create_datasheet(a,b,2)

#x = [[81,61],[61,192],[192,71]...]
#y = [1458,1228,1100...]

[这是我的python代码]

def create_datasheet(x, y, look_back=1):
    tx, ty = [], []

    for i in range(len(x) - look_back):
        tx.append(x[i:(i+look_back)])
        ty.append(y[i+look_back])
    #end for

    tx = np.array(tx)
    tx = np.reshape(tx, (tx.shape[0], look_back, 1))
    ty = np.array(ty)
    return np.array(tx), np.array(ty)
#end def

#convert data to 3D value(value_count,time_stamp,factors)
x , y = create_datasheet(a,b,5)
train_x = x[:52]
train_y = y[:52]

#Declare My Module
K.clear_session()
model = Sequential()
model.add(LSTM(120,batch_input_shape=(1, 5, 1) ,stateful=True, return_sequences=True))
model.add(Dropout(0.5))
model.add(LSTM(120,batch_input_shape=(1, 5, 1) ,stateful=True))
model.add(Dropout(0.5))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(train_x,train_y,batch_size=1,epochs=1000)

[Keras火车记录]

Epoch 35/1000
52/52 [==============================] - 1s 12ms/step - loss: 3675721.6514
Epoch 36/1000
52/52 [==============================] - 1s 13ms/step - loss: 3675705.2692
Epoch 37/1000
52/52 [==============================] - 1s 15ms/step - loss: 3649188.8444
Epoch 38/1000
52/52 [==============================] - 1s 13ms/step - loss: 3653725.1148
Epoch 39/1000
52/52 [==============================] - 1s 13ms/step - loss: 3637119.4032
Epoch 40/1000
52/52 [==============================] - 1s 13ms/step - loss: 3623463.1532
Epoch 41/1000
52/52 [==============================] - 1s 12ms/step - loss: 3595661.7746
Epoch 42/1000
52/52 [==============================] - 1s 13ms/step - loss: 3577834.8954
Epoch 43/1000
52/52 [==============================] - 1s 13ms/step - loss: 3566596.0252
Epoch 44/1000

你必须规范化数据。 您可以使用 sklearn 的MinMaxScaler来实现

from sklearn.preprocessing import MinMaxScaler
import numpy as np

data = np.array([
             #a      b
            [81,  2140],
            [61,  1782],
            [192, 1458],
            [71,  1228],
            [66,  1100],
            [433, 1015],
            [378,  768],
            [449, 1013],
            [484,  912]
])

scaler = MinMaxScaler()
scaler.fit(data)
scaled = scaler.transform(data)
print(scaled)

输出(norm_a,nor_b):

[[0.04728132 1.        ]
 [0.         0.73906706]
 [0.30969267 0.50291545]
 [0.02364066 0.33527697]
 [0.01182033 0.24198251]
 [0.87943262 0.18002915]
 [0.74940898 0.        ]
 [0.91725768 0.17857143]
 [1.         0.10495627]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM