【问题标题】:Splitting data into sequences for LSTM将数据拆分为 LSTM 的序列
【发布时间】:2022-04-08 20:43:46
【问题描述】:

我输入了 3 个特征,我只想预测一个特征。我想将数据分成每个序列中的 10 个样本,然后训练 LSTM 模型。我的代码如下。

def split_sequences(sequence_x, sequence_y, n_steps):
    X, y = [], []
    for i in range(0,len(sequence_x),n_steps):
        X.append(sequence_x[i:i+n_steps])
        y.append(sequence_y[i:i+n_steps])
    X = np.array(X)
    y = np.array(y)
    return X,y

首先,我将预测的特征与数据框分开。

sequence_y = df['feature4'].to_list()
df = df.drop(columns = ['feature4'])
n_steps_s = 10
X, y = split_sequences(df.values.tolist(), sequence_y, n_steps_s)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)

LSTM 模型:

n_features = len(X_train[0][0])

# define model
model = Sequential()
model.add(LSTM(100, activation='relu', return_sequences=True, input_shape=(n_steps_in, n_features)))
model.add(LSTM(100, activation='relu'))
model.add(Dense(n_steps_out))
model.compile(optimizer='adam', loss='mse')
# fit model
model.fit(X_train, y_train, epochs=2, verbose=1)

然后我得到这个错误:

ValueError                                Traceback (most recent call last)
<ipython-input-682-fa5811eb8173> in <module>
      8 model.compile(optimizer='adam', loss='mse')
      9 # fit model
---> 10 model.fit(X_train, y_train, epochs=2, verbose=1)
.
.
.
.
ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type list).

【问题讨论】:

  • 你从哪里导入'train_test_split'?您是否尝试过将“X_train”和“y_train”对象转换为 numpy 数组,然后再将它们传递给“fit”函数,就像错误提示的那样?
  • 我从“sklearn.model_selection”导入了“train_test_split”。现在 X_train numpy.ndarray 的类型,我什至在将它传递给 fit 函数之前尝试了 X_train = np.asarray(X_train) 。 y_train 也是如此
  • X_train 确实是一个 numpy 数组,但是它的条目呢? type(X_train[0])list?那么你可能需要修改split_sequences函数。
  • 是的,它给出了列表。我更新了 split_sequences 函数。 ' def split_sequences(sequence_x, sequence_y, n_steps): X, y = [], [] for i in range(0,len(sequence_x),n_steps): X.append(np.array(sequence_x[i:i+n_steps) ])) y.append(np.array(sequence_y[i:i+n_steps])) X = np.array(X) y = np.array(y) return X,y ' 当前运行时会出现此错误拟合函数:ValueError:无法将 NumPy 数组转换为张量(不支持的对象类型 numpy.ndarray)。
  • @nehiridil 我尝试使用示例数据并没有收到该错误。您是否检查了this 线程(错误与您的错误不完全相同,但其中一个答案可能仍然有帮助)?

标签: pandas numpy tensorflow lstm


【解决方案1】:
 def split_sequence(sequence, n_steps):
X,y = list(),list()
for i in range(len(sequence)):
    end_ix=i+n_steps
    if end_ix > len(sequence)-1:
        break
    seq_x, seq_y =sequence[i:end_ix], sequence[end_ix]
    X.append(seq_x)
    y.append(seq_y)
return array(X),array(y)

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 2021-01-14
  • 1970-01-01
  • 2022-01-21
  • 2017-09-12
  • 1970-01-01
  • 1970-01-01
  • 2022-12-22
  • 2020-07-14
相关资源
最近更新 更多