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

2024-03-28 20:50:27 发布

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

以下是我的模型定义:

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))进行预处理。你知道吗


Tags: testadddatasizesignalmodellencreate
1条回答
网友
1楼 · 发布于 2024-03-28 20:50:27

Is the implementation right way?

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

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

你可以检查你的结果是否比随机抽样好。你知道吗

I wonder how to get the value of the next data.

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

a = x_test[-1:]

然后,你在这里预测下一天:

b = model.predict(a)

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

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

相关问题 更多 >