我究竟如何才能将不同长度的序列传递给keras上的LSTM?

我究竟如何才能将不同长度的序列传递给keras上的LSTM?,keras,lstm,keras-layer,Keras,Lstm,Keras Layer,我有一个X_序列集,包含744983个样本,分为24443个序列,而每个序列中的样本数量是不同的。每个样本是一个30维的向量。如何将这些数据输入到Keras的LSTM中? 以下是列车组的一些说明: print(type(X_train)) print(np.shape(X_train)) print(type(X_train[0])) print(np.shape(X_train[0])) <class 'list'> (24443, ) <class 'numpy.ndar

我有一个X_序列集,包含744983个样本,分为24443个序列,而每个序列中的样本数量是不同的。每个样本是一个30维的向量。如何将这些数据输入到Keras的LSTM中? 以下是列车组的一些说明:

print(type(X_train))
print(np.shape(X_train))
print(type(X_train[0]))
print(np.shape(X_train[0]))

<class 'list'>
(24443, )
<class 'numpy.ndarray'>
(46, 30)
错误为“输入0与层lstm_24不兼容:预期ndim=3,发现ndim=2”

如果我将input_shape从(30,)更改为(None,30),代码将运行1分钟,检查模型输入时给出错误:传递给模型的Numpy数组列表的大小不是模型预期的大小。期望看到1个阵列,但得到了以下24443个阵列的列表:

此外,如果我在拟合之前将X_列更改为NParray,错误将变为:预期lstm_26_输入具有3维,但得到了具有形状的数组(24443,1)

我还尝试填充序列:

X_train = sequence.pad_sequences(X_train)
X_test = sequence.pad_sequences(X_test)
但是,它将我的输入变成了“0”、“1”和“1”

#X_train = np.array(X_train)
#X_test = np.array(X_test)
print(X_train[0])
[[ 0  0  0 ...,  0  0  0]
 [ 0  0  0 ...,  0  0  0]
 [ 0  0  0 ...,  0  0  0]
 ..., 
 [ 0  0  0 ...,  0  1 -1]
 [ 0  0  0 ...,  0  1  0]
 [ 0  0  0 ...,  0  0  0]]

默认情况下,
sequence.pad_sequences
将数据强制转换为
int32
dtype:

tf.keras.preprocessing.sequence.pad_序列(
序列,
maxlen=无,
dtype='int32',#问题就在这里
padding='pre',
截断class='pre',
值=0.0
)
尝试将数据类型更改为
float32

X\u-train=sequence.pad\u序列(X\u-train,dtype='float32')
X_测试=序列。pad_序列(X_测试,dtype='float32')

什么是
X\u列车形状
?我发现这个问题有点混乱,如果问题是输入形状,你应该发布输入形状,而不是它们的内容(我们无法从中检索形状)嗨,我使用np.split函数生成24443序列,X_序列的类型是“list”,它没有属性“shape”,但是np.shape(X_序列)=(24443,)。运行“X_train=np.array(X_train)”后,X_train.shape为(24443,)。在我填充序列之后,X_train.shape=(24443124,30)。填充序列之前X_train[0]是什么?如果您的X_train.shape为(24443,124,30),您是否尝试将LSTM的输入_shape参数更改为(124,30)?
#X_train = np.array(X_train)
#X_test = np.array(X_test)
print(X_train[0])
[[ 0  0  0 ...,  0  0  0]
 [ 0  0  0 ...,  0  0  0]
 [ 0  0  0 ...,  0  0  0]
 ..., 
 [ 0  0  0 ...,  0  1 -1]
 [ 0  0  0 ...,  0  1  0]
 [ 0  0  0 ...,  0  0  0]]