Keras多输出LSTM训练为何有3个损失值却仅2个准确率值及含义
多输出LSTM训练日志指标解析
1. 训练阶段对应指标字段
直接对应训练集维度的指标字段如下:
- 训练总损失值:
loss - 各分支单独的训练损失:
activation_26_loss(ReLU输出分支损失)、lstm_151_loss(LSTM细胞状态输出分支损失) - 各分支单独的训练准确率:
activation_26_accuracy(ReLU输出分支准确率)、lstm_151_accuracy(LSTM细胞状态输出分支准确率)
所有带val_前缀的字段,均为验证集上对应同维度的计算值,和训练集字段一一匹配。
2. 指标数量差异与各指标具体含义
为什么会有3个损失值
Keras对多输出模型的损失计算有固定逻辑,你在编译模型时设置loss='mse'且没有单独给每个输出分支指定专属损失、损失权重时,会自动生成三类损失日志:
- 两个分支专属的单损失:模型一共设置了2个输出,Keras会对每个输出单独执行一次损失计算,对应生成两个分支的损失条目:
activation_26_loss:ReLU激活层的输出(也就是Dense层接ReLU的预测分支)和训练标签做MSE计算得到的单分支损失lstm_151_loss:LSTM返回的细胞状态(即代码里的state_c,作为第二个输出分支)和训练标签做MSE计算得到的单分支损失
- 全局汇总的总损失:
loss是把所有单分支损失按默认权重(未自定义权重时,每个分支的权重都为1)求和得到的最终优化目标值。从你提供的Epoch 1数值可以直接验证这个计算关系:0.1153(ReLU分支损失) + 0.1185(LSTM分支损失) = 0.2338,和日志里打印的总损失数值完全相等。
为什么只有2个准确率值
你在编译时设置的metrics=['accuracy']的计算逻辑和损失不同:
- Keras会对每个输出分支单独计算一次accuracy指标,2个输出自然对应2个准确率日志,也就是我们看到的
activation_26_accuracy和lstm_151_accuracy,分别对应两个输出分支独立计算的准确率结果。 - Keras默认只会自动生成“所有分支损失求和”的总损失日志,但不会对逐分支的评估指标(比如accuracy)做全局汇总计算,因此不会生成一个总的准确率字段,最终日志里也就只会出现2个准确率值。
补充提示:你当前的两个输出分支本质是回归任务(配置的是MSE损失),但Keras自动计算的accuracy是按分类任务逻辑执行的——只有预测值和标签完全相等才算预测正确,和回归任务的评估逻辑完全不匹配,这也是日志里两个准确率长期显示为0的核心原因。
内容的提问来源于stack exchange,提问作者olo
相关产品推荐
相关产品推荐

