【发布时间】:2022-11-22 00:10:21
【问题描述】:
How to use the LSTM model for multi-step forecasting? 在这篇文章中,所需的网络是为回归输出设计的。但我想在接下来的 5 个步骤中使用 LSTM 分类标签。网络应该如何设计?这是我的代码:
import numpy as np
import pandas as pd
import tensorflow as tf
from tensorflow.keras.models import *
from tensorflow.keras.layers import *
batch_size = 32
seq_len = 128
nume_epoch = 50
num_candles = 5
train_path = 'data.csv'
df = pd.read_csv(train_path)
df_train = df[:int(len(df)*0.8)]
df_val = df[int(len(df)*0.84):]
num_labels = len(df_train['label'].unique())
Y_train_data = df_train['label'].values
Y_val_data = df_val['label'].values
Y_train_data = tf.keras.utils.to_categorical(Y_train_data, num_classes=num_labels)
Y_val_data = tf.keras.utils.to_categorical(Y_val_data, num_classes=num_labels)
df_train.drop(columns=['label'], inplace=True)
df_val.drop(columns=['label'], inplace=True)
train_data = df_train.values
val_data = df_val.values
X_train, y_train = [], []
for i in range(seq_len, len(train_data) - num_candles):
X_train.append(train_data[i - seq_len:i])
y_train.append(Y_train_data[i:i + num_candles])
X_train, y_train = np.array(X_train), np.array(y_train)
X_val, y_val = [], []
for i in range(seq_len, len(val_data) - num_candles):
X_val.append(val_data[i - seq_len:i])
y_val.append(Y_val_data[i:i + num_candles])
X_val, y_val = np.array(X_val), np.array(y_val)
def create_model():
model = Sequential()
model.add(LSTM(128, input_shape=(X_train.shape[1], X_train.shape[2]), return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(128, return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(128))
model.add(Dense(64, activation='relu'))
model.add(Dense(num_labels, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()
return model
model = create_model()
callback = tf.keras.callbacks.ModelCheckpoint('LSTM_Class_.hdf5', monitor='val_loss',
save_best_only=True, verbose=1)
history = model.fit(X_train, y_train, batch_size=batch_size, epochs=nume_epoch, callbacks=[callback], validation_data=(X_val, y_val))
但这给了我这个错误:
ValueError:形状 (None, 5, 2) 和 (None, 2) 不兼容
【问题讨论】:
-
你可以发布 data.csv 吗?
-
你在尝试预测多个标签的 softmax 吗?
-
@golden-lion 我想预测下一行 5 的标签,标签可以是二进制的或具有多个值。
-
Lstm可用于多标签输出。您是否考虑过使用限制性玻尔兹曼来了解结果
标签: python deep-learning classification lstm