【发布时间】: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