我想将对应于发音数字的频谱图馈送到以Conv1D作为第一层的模型。然后,我使用RNN层对发出的单词进行分类。这些频谱图具有不同的序列/时间长度,但是当然具有相同的特征编号。
在Keras的Conv1D文档中:
将这一层用作模型的第一层时,请为每步具有128个要素的可变长度序列提供一个input_shape参数[..](无,128)。
因此似乎可以处理它。无需填充/调整大小。
我曾经用numpy(例如:numpy.vstack)准备相同形状的数据,但是现在我有各种各样的形状,我不知道该怎么做!而且我只发现了人们拥有相同形状数据的示例。
或者也许用numpy是不可能的,我还必须使用其他东西吗?
谢谢!
答案 0 :(得分:0)
有可能,但是您必须确保将批处理在一起的序列具有相同的长度,这就是为什么大多数人只是简单地填充所有序列。如果使用屏蔽,它也会忽略屏蔽值,因此没有区别。
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)