首页 > 解决方案 > 深度学习模型 (LSTM) 预测相同的类别标签

问题描述

我正在尝试使用 LSTM 模型解决口语数字识别任务,其中音频文件在进行全局平均池化后被转换为频谱图并输入 LSTM 模型。这是它的架构

tf.keras.backend.clear_session()

#input layer
input_= Input(shape = (64, 35))

lstm = LSTM(100, activation='tanh', return_sequences= True, kernel_regularizer = l2(0.000001),  
recurrent_initializer = 'glorot_uniform')(input_)

lstm = GlobalAveragePooling1D(data_format='channels_first')(lstm)

dense = Dense(20, activation='relu', kernel_regularizer = l2(0.000001), kernel_initializer='glorot_uniform')(lstm)

drop = Dropout(0.8)(dense)

dense1 = Dense(25, activation='relu', kernel_regularizer = l2(0.000001), kernel_initializer= 'he_uniform')(drop)

drop = Dropout(0.95)(dense1)

output = Dense(10,activation = 'softmax', kernel_regularizer = l2(0.000001), kernel_initializer= 'glorot_uniform')(drop)

model_2 = Model(inputs = [input_], outputs = output)

model_2.summary()

总结为 - 口语数字模型

我需要计算 F1 分数来检查模型的性能,我已经实现了自定义回调并使用了 TensorFlow 插件 F1 分数。但是,我不会得到正确的结果,对于每个 epoch,我都会得到恒定的 F1 得分值。

在进一步挖掘中,我发现我的模型在整个 epoch 预测相同的类别标签,而它应该在一个 epoch 中预测 10 个类别。因为存在 10 个类标签值。

这是我的 model.compile 和 model.predict 命令。我在这里使用了 TensorFlow 插件 -

from tensorflow import keras
opt = keras.optimizers.Adam(0.001, clipnorm=0.8)

model_2.compile(loss='categorical_crossentropy', optimizer=opt, metrics = metric)

hist = model_2.fit([X_train_spectrogram], 
                   [y_train_converted],
                   validation_data= ([X_test_spectrogram], [y_test_converted]),
                   epochs = 10,
                   verbose =1, 
                   callbacks=[tensorBoard_callbk2, ClearMemory()],
                   #  steps_per_epoch = 3,
                   batch_size=32)

这就是我所说的获得相同预测的意思,整个数组都填充了相同的预测值。

模型.预测(测试数据)

为什么模型预测相同的类别标签?或如何纠正它?

我已经尝试增加可训练参数的数量,也增加 - 减少批量大小,但这对我没有帮助。如果有人知道你能帮我吗?

标签: tensorflowkeraslstm

解决方案


推荐阅读