我正在尝试构建LSTM,并对构建数据的最佳方式感到困惑。
我有一个看起来像这样的数据框:
df.head(5)
data labels
0 [0.0009808844009380855, 0.0008974465127279559] 1
1 [0.0007158940267629654, 0.0008202958833774329] 3
2 [0.00040971929722210984, 0.000393972522972382] 3
3 [7.916243163372941e-05, 7.401835468434177e243] 3
4 [8.447556379936086e-05, 8.600626393842705e-05] 3
“数据”列是我的X,标签是y。 df有34890行。每行包含2个浮点数。数据代表一堆顺序的文本,每个观察值代表一个句子。有5个班级。
我正在尝试使LSTM符合此数据,并对如何使用timestep参数感到困惑。
使用此代码,我得到以下信息:
data = np.array(df.class_proba.to_list())
labels = pd.get_dummies(df['speaker_spaff']).values
print('Shape of data tensor:', data.shape)
print('Shape of label tensor:', labels.shape)
Shape of data tensor: (34890, 2)
Shape of label tensor: (34890, 5)
我认为我的标签张量是正确的,但是我对我的数据张量感到困惑。
Keras LSTM层需要以下形状:样本,时间步长和特征。
如果我理解正确,我的样本数为34890,我的特征为2,但是时间戳呢? timestamp参数应该是什么?如何调整数据以适应这种情况?
答案 0 :(得分:1)
如果需要多个时间步长,则必须创建一个滑动窗口函数以帮助您重塑数据,为此,Keras的TimeSeriesGenerator
是一个很好的工具(here a good example)
如果您认为数据必须具有单个时间步长,则只需简单地扩展维度即可:
data[:,None,:]
==>新形状:(34890,1,2),标签就可以了