keras LSTM预测差

2024-04-16 12:45:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图根据某个序列预测值(我有5个值,如1、2、3、4、5,并希望预测下一个-6)。我用的是LSTM keras。在

创建培训数据:

import numpy as np 
from keras.models import Sequential
from keras.layers import LSTM,Dense
a = [float(i) for i in range(1,100)]
a = np.array(a)

data_train = a[:int(len(a)*0.9)]
data_test = a[int(len(a)*0.9):]

x = 5
y = 1
z = 0

train_x = []
train_y = []
for i in data_train:
    t = data_train[z:x]
    r = data_train[x:x+y]
    if len(r) == 0:
        break
    else:
        train_x.append(t)
        train_y.append(r)
        z = z + 1
        x = x+1

train_x = np.array(train_x)
train_y = np.array(train_y)

x = 5
y = 1
z = 0

test_x = []
test_y = []
for i in data_test:
    t = data_test[z:x]
    r = data_test[x:x+y]
    if len(r) == 0:
        break
    else:
        test_x.append(t)
        test_y.append(r)
        z = z + 1
        x = x+1

test_x = np.array(test_x)
test_y = np.array(test_y)

print(train_x.shape,train_y.shape)
print(test_x.shape,test_y.shape)

将其频繁转换为LSTM形状:

^{pr2}$

建立和培训模型:

model = Sequential()
model.add(LSTM(32,return_sequences = False,input_shape=(trein_x_1.shape[1],1)))
model.add(Dense(1))

model.compile(loss='mse',  optimizer='adam', metrics=['accuracy'])
history = model.fit(train_x_1,
                    train_y_1,
                    epochs=20,
                    shuffle=False, 
                    batch_size=1, 
                    verbose=2, 
                    validation_data=(test_x_1,test_y_1))

但是我得到了一个非常糟糕的结果,有人能解释一下我做错了什么吗。在

pred = model.predict(test_x_1)
for i,a in enumerate(pred):
    print(pred[i],test_y_1[i])
[89.71895] [95.]
[89.87877] [96.]
[90.03465] [97.]
[90.18714] [98.]
[90.337006] [99.]

恩克斯。在


Tags: intestimportfordatamodellennp
1条回答
网友
1楼 · 发布于 2024-04-16 12:45:09

你希望网络能从你用于训练的数据中推断出来。神经网络are not good at this。你可以试着规范化你的数据,这样你就不再外推了,比如用相对值代替绝对值。这当然会使这个例子变得非常微不足道。在

相关问题 更多 >