繁体   English   中英

我想知道我对使用 keras 实现 lstm 层是否正确

[英]I wonder if I was right about the implement of lstm layer using keras

这是我的模型定义:

model = Sequential()
model.add(LSTM(i, input_shape=(None, 1), return_sequences=True))
model.add(Dropout(l))

model.add(LSTM(j))
model.add(Dropout(l))

model.add(Dense(k))
model.add(Dropout(l))

model.add(Dense(1))

这是结果

p = model.predict(x_test)
plt.plot(y_test)
plt.plot(p)

顺序输入代表先前时间步中的过去信号,输出是预测下一时间步中的信号。 将训练和测试数据拆分后,对测试数据的预测如下:

1

该图显示了与黄金测试数据和预测几乎完美匹配。 有可能以如此高的准确度进行预测吗?

我认为有些事情是错误的,因为没有波动。 所以我想知道它是否得到了正确的实施。

如果实现是正确的,您如何获得以下(下一个)值?

做这个工具合适吗?

a = x_test[-1]
b = model.predict(a)
c = model.predict(b)
...

总结一下这个问题:

  1. 实施方式正确吗?

  2. 我想知道如何获取下一个数据的值。

def create_dataset(signal_data, look_back=1):
    dataX, dataY = [], []
    for i in range(len(signal_data) - look_back):
        dataX.append(signal_data[i:(i + look_back), 0])
        dataY.append(signal_data[i + look_back, 0])
    return np.array(dataX), np.array(dataY)

train_size = int(len(signal_data) * 0.80)
test_size = len(signal_data) - train_size - int(len(signal_data) * 0.05)
val_size = len(signal_data) - train_size - test_size
train = signal_data[0:train_size]
val = signal_data[train_size:train_size+val_size]
test = signal_data[train_size+val_size:len(signal_data)]

x_train, y_train = create_dataset(train, look_back)
x_val, y_val = create_dataset(val, look_back)
x_test, y_test = create_dataset(test, look_back)

我使用create_datasetlook_back=20

signal_data使用最小-最大归一化MinMaxScaler(feature_range=(0, 1))预处理。

实施方式正确吗?

你的代码似乎是正确的。 我认为你没有得到令人惊讶的结果。 您需要将结果与基线进行比较,下一次预测是从可能的日常变化范围中随机采样的。 这样至少您可以了解您的模型是否比随机抽样做得更好。

delta_train = train[1][1:] - train[1][:-1]
delta_range_train = delta_train.max()-delta_train.min()

# generating the baseline based on the change range in training:
random_p = test[0][:, -1] + (np.random.rand(test[0].shape[0])-0.5)*delta_range_train

您可以检查您的结果是否比随机样本random_p

我想知道如何获取下一个数据的值。

这为您提供了测试集中的最后一个数据点:

a = x_test[-1:]

然后,您在这里预测下一个点日:

b = model.predict(a)

基于look_back您可能需要保留一些数据点以预测下一个下一个点:

c = model.predict(np.array([list(a[0,1:])+[b]])

暂无
暂无

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

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