tensorflow - 深度学习模型 (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)
这就是我所说的获得相同预测的意思,整个数组都填充了相同的预测值。
为什么模型预测相同的类别标签?或如何纠正它?
我已经尝试增加可训练参数的数量,也增加 - 减少批量大小,但这对我没有帮助。如果有人知道你能帮我吗?
解决方案
推荐阅读
- python - 如何让 Discord 机器人在用户加入时添加角色?
- java - 为什么 throwExceptionIfNoHandlerFound 在 spring mvc 中的 web.xml 中不起作用
- javascript - 为什么它的返回未定义?
- r - 如何在 r 中打开这些功能?
- python - 通过正则表达式从文件中提取数据
- strapi - Strapi 查询与 IN 过滤器和 AND 子句的关系
- tensorflow - 用梯度带子类化python中的多输入
- elasticsearch - Kibana Discover 中缺少时间选择器
- javascript - 跨度上的颜色更改关键字问题
- reactjs - 如何在 React 启动时只初始化一次上下文