[英]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.