2 回答
TA贡献1860条经验 获得超8个赞
LSTM(与感知器不同)不是前馈网络。它需要历史来预测下一点。因此,LSTM 的适当输入张量应该具有形状(timesteps, num_features)
,这意味着每个样本都是一系列timesteps
观察结果,使得细胞状态在序列的第一次观察中启动并贯穿整个序列。
因此,输入张量应具有以下形状(num_sequences, seq_length, num_features)
:
num_sequences
:样本数,即你需要多少个序列来训练模型?seq_length
: 这些序列有多长。对于可变长度序列,您可以提供None
.num_features
: 在给定的序列中有多少个特征有一个单一的观察?
TA贡献1875条经验 获得超3个赞
LSTM 层的输入是一个 3d 张量,形状为 (data_length, timesteps, n_features)
为此,您首先必须使用以下方式转换数据:
def slice_data(self, data, n_steps, n_ahead=1):
X_data = data.drop(['y'], axis=1)
y_data = data['y']
X = []
y = []
for i in range(len(X_data)):
end_point = i + n_steps
if end_point + n_ahead > len(X_data)-1:
break
slice_x, slice_y = X_data[i:end_point], y_data.loc[end_point]
X.append(slice_x)
y.append(slice_y)
X, y = np.array(X), np.array(y)
self.n_features = X.shape[2]
X = X.reshape((X.shape[0], X.shape[1], X.shape[2]))
return X, y
或者您可以使用我自己制作的工具:EasyLSTM EasyLSTM 只需一行代码即可将您的输入数组塑造成对 LSTM 友好的数组
添加回答
举报