我为特定目的创建了BLSTM网络,我觉得可能做错了什么。 这是东西:
我有一个数据集,其中包含222个音频样本,分为1000个时间帧,每个时间帧包含120个频谱特征。就像
X = {[222,1000,120]}
然后我有形状的目标
y = {[222,1000,1]},
这些是输入采样的每个时间范围的标签0/1。(这告诉输入音频的时间范围是否有节拍。)
因此,我希望网络从根本上预测大小为{1、1000(或随机),120}的随机样本的标签。 网络和培训的代码如下:
def build_model():
model = Sequential()
model.add(Masking(input_shape=(X_train.shape[1], X_train.shape[2])))
model.add(Bidirectional(LSTM(units=25, return_sequences=True)))
model.add(Bidirectional(LSTM(units=25, return_sequences=True)))
model.add(Bidirectional(LSTM(units=25, return_sequences=True)))
model.add(Dense(units=1, activation='sigmoid'))
model.compile(loss=keras.losses.binary_crossentropy,
optimizer=keras.optimizers.SGD(lr=0.01, clipvalue=5, momentum=0.9),
metrics=['binary_accuracy'])
return model
if __name__ == "__main__":
model = build_model()
model.summary()
history = model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=10, shuffle=True,
steps_per_epoch=len(X_train), validation_steps=len(X_test), verbose=1)
接下来发生的是,我猜想网络从第二个时代就开始过度拟合,产生〜0.96的准确度,这是稳定的,并且损耗仅减少了一点。当我尝试进行预测时,我只得到非常接近零的数字,甚至没有像我所需要的0.2或0.3的小峰值。 我真的很绝望,不知道如何解决这个问题。在模型中拟合数据是否可能存在问题?在我看来,也许它只是重复一个给定的样本或类似的东西。如果有任何想法,我将不胜感激!