Python 当输入具有不同的时间范围时,如何为Conv1D层准备数据?

Python 当输入具有不同的时间范围时,如何为Conv1D层准备数据?,python,keras,Python,Keras,我想将光谱图——对应于发出的数字——输入到第一层为Conv1D的模型中。然后,我使用RNN层对发出的单词进行分类。这些光谱图具有不同的序列/时间长度,但当然具有相同的特征编号 在Keras的Conv1D文档中: 当使用此层作为模型中的第一层时,为每个步骤具有128个特征的可变长度序列提供输入_形状参数[…](无,128) 看来它能应付。无需填充/调整大小 我习惯于用numpy(例如:numpy.vstack)准备相同的形状数据,但现在我有了各种形状,我不知道该怎么做!我只找到了人们拥有相同形状数

我想将光谱图——对应于发出的数字——输入到第一层为Conv1D的模型中。然后,我使用RNN层对发出的单词进行分类。这些光谱图具有不同的序列/时间长度,但当然具有相同的特征编号

在Keras的Conv1D文档中:

当使用此层作为模型中的第一层时,为每个步骤具有128个特征的可变长度序列提供输入_形状参数[…](无,128)

看来它能应付。无需填充/调整大小

我习惯于用numpy(例如:numpy.vstack)准备相同的形状数据,但现在我有了各种形状,我不知道该怎么做!我只找到了人们拥有相同形状数据的例子

或者也许这是不可能的与numpy,我必须使用其他东西


谢谢大家!

这是可能的,但你必须确保分批处理在一起的序列具有相同的长度,这就是为什么大多数人只是简单地填充所有序列。如果使用遮罩,它也会忽略遮罩的值,因此没有区别

model.add(LSTM(32, return_sequences=True, input_shape=(None, 5)))
model.add(LSTM(8, return_sequences=True))
model.add(TimeDistributed(Dense(2, activation='sigmoid')))

print(model.summary(90))

model.compile(loss='categorical_crossentropy',
              optimizer='adam')

def train_generator():
    while True:
        sequence_length = np.random.randint(10, 100)
        x_train = np.random.random((1000, sequence_length, 5))
        # y_train will depend on past 5 timesteps of x
        y_train = x_train[:, :, 0]
        for i in range(1, 5):
            y_train[:, i:] += x_train[:, :-i, i]
        y_train = to_categorical(y_train > 2,5)
        yield x_train, y_train

model.fit_generator(train_generator(), steps_per_epoch=30, epochs=10, verbose=1)