python 上的 LSTM 模型,重塑预测集
LSTM model on python, reshape of the prediction set
我正在研究用于时间序列预测的 LSTM 模型。
它运行良好,直到我必须重塑模型的输出以计算准确度指数并绘制结果。这是我的代码:
train, test = btc.loc[btc.index <= '2020-12-31'], btc.loc[btc.index > '2020-12-31']
scaler = StandardScaler()
scaler = scaler.fit(train)
train, test = scaler.transform(train), scaler.transform(test)
def to_sequences(x, y, seq_size=1):
x_values = []
y_values = []
for i in range(len(x)-seq_size):
x_values.append(x[i:(i+seq_size)])
y_values.append(y[i+seq_size])
return np.array(x_values), np.array(y_values)
seq_size = 30
xtrain, ytrain = to_sequences(train, train, seq_size)
xtest, ytest = to_sequences(test, test, seq_size)
model = Sequential()
model.add(LSTM(128, input_shape=(xtrain.shape[1], xtrain.shape[2])))
model.add(Dropout(rate=0.2))
model.add(RepeatVector(xtrain.shape[1]))
model.add(LSTM(128, return_sequences=True))
model.add(Dropout(rate=0.2))
model.add(TimeDistributed(Dense(xtrain.shape[2])))
model.compile(optimizer='adam', loss='mae')
model.summary()
# fit model
history = model.fit(xtrain, ytrain, epochs=10, batch_size=32, validation_split=0.1, verbose=1)
trainPredict = model.predict(xtrain)
testPredict = model.predict(xtest)
模型预测后,我不知道如何管理它,因为预测的形状是 (1023,30,1) 但我显然需要重塑才能拥有二维数组。如果我使用 .reshape(-1,1) 进行整形,我将获得一个带有 (1023, 30) 的二维数组,但我需要一个带有 (1203, 1) 的二维数组,即仅包含预测值的数组。
模型预测的输出应该已经具有形状 (1203, 1)。你不应该需要进一步破坏它以获得正确的形状。
您正在使用 TimeDistributed
中的 Dense
层,它为每个时间维度使用相同的密集层。如果你想要最终预测,你应该只使用最后一个时间维度,你可以通过在最后一个 LSTM
层中将 return_sequences=True
更改为 False
并使用常规 Dense
层作为输出层。
我正在研究用于时间序列预测的 LSTM 模型。 它运行良好,直到我必须重塑模型的输出以计算准确度指数并绘制结果。这是我的代码:
train, test = btc.loc[btc.index <= '2020-12-31'], btc.loc[btc.index > '2020-12-31']
scaler = StandardScaler()
scaler = scaler.fit(train)
train, test = scaler.transform(train), scaler.transform(test)
def to_sequences(x, y, seq_size=1):
x_values = []
y_values = []
for i in range(len(x)-seq_size):
x_values.append(x[i:(i+seq_size)])
y_values.append(y[i+seq_size])
return np.array(x_values), np.array(y_values)
seq_size = 30
xtrain, ytrain = to_sequences(train, train, seq_size)
xtest, ytest = to_sequences(test, test, seq_size)
model = Sequential()
model.add(LSTM(128, input_shape=(xtrain.shape[1], xtrain.shape[2])))
model.add(Dropout(rate=0.2))
model.add(RepeatVector(xtrain.shape[1]))
model.add(LSTM(128, return_sequences=True))
model.add(Dropout(rate=0.2))
model.add(TimeDistributed(Dense(xtrain.shape[2])))
model.compile(optimizer='adam', loss='mae')
model.summary()
# fit model
history = model.fit(xtrain, ytrain, epochs=10, batch_size=32, validation_split=0.1, verbose=1)
trainPredict = model.predict(xtrain)
testPredict = model.predict(xtest)
模型预测后,我不知道如何管理它,因为预测的形状是 (1023,30,1) 但我显然需要重塑才能拥有二维数组。如果我使用 .reshape(-1,1) 进行整形,我将获得一个带有 (1023, 30) 的二维数组,但我需要一个带有 (1203, 1) 的二维数组,即仅包含预测值的数组。
模型预测的输出应该已经具有形状 (1203, 1)。你不应该需要进一步破坏它以获得正确的形状。
您正在使用 TimeDistributed
中的 Dense
层,它为每个时间维度使用相同的密集层。如果你想要最终预测,你应该只使用最后一个时间维度,你可以通过在最后一个 LSTM
层中将 return_sequences=True
更改为 False
并使用常规 Dense
层作为输出层。