首页 > 解决方案 > keras loss 和其他自定义 mertic 不准确

问题描述

我有一个用 keras 构建的标准双向 LSTM 模型,没什么花哨的,只是一堆层:

==================================================== ============== embedding_1(嵌入)(无,1697、300)9776100 _________________________________________________________________双向_1(双向(无,1697、150)225600 _________________________________________________________________双向_2(双向(无,1697、60) 43440 _________________________________________________________________ bidirectional_3(双向(无,1697、40)12960 _________________________________________________________________ last_blstm(展平)(无,67880)0 _________________________________________________________________dense_1(密集)(无,5)339405

我的损失似乎在正常减少,但情况并非如此

11800/13500 [=========================>....] - ETA:2:16 - 损失:107.6926 -acc:0.2010 12000 /13500 [==========================>....] - ETA:2:00 - 损失:106.0187 - acc:0.2019 12200/ 13500 [===========================>...] - ETA:1:44 - 损失:104.4009 - acc:0.2024 12400/13500 [==========================>...]-ETA:1:28-损失:102.8412-acc:0.2029 12600/13500 [ ===========================>..] - ETA:1:12 - 损失:101.3140 - acc:0.2021 12800/13500 [= ==========================>..] - ETA:56s - 损失:99.8337 - acc:0.2021 13000/13500 [==== =======================>..] - ETA:40s - 损失:98.4028 - acc:0.2022 13200/13500 [======= =====================>。] - ETA:24s - 损失:97.0180 - acc:0.2030 13400/13500 [========== ==================>。] - ETA:8s - 损失:95.6736 - acc:0。2031 13500/13500 [===============================] - 1141s 85ms/步 - 损耗:94.9990 - acc: 0.2029 - val_loss:4.7779 - val_acc:0.2193

这有点奇怪,我的数据集对每个类都是平衡的,我没有使用任何自定义损失函数,我的优化器是标准 SGD(也尝试过 Adam,结果相同),我的批量大小是 200

编辑:没关系这部分......

另外,我尝试添加自定义指标,结果更加奇怪:

    print("Epoch: {} end".format(epoch))
    val_predict = np.asarray(self.model.predict(self.validation_data[0]))
    print("Predictions: ", val_predict)
    val_predict = np.argmax(val_predict, axis=1)
    val_targ = self.validation_data[1]
    val_targ = np.argmax(val_targ, axis=1)

    print("Val data: {}, Val pre: {}, val_targ: {}".format(self.validation_data[0][0:100], val_predict[0:10],
                                                           val_targ[0:10]))

我得到以下输出:

Predictions: [[0.1997815 0.19978242 0.20011796 0.19970864 0.20060949]
[0.19989796 0.20036548 0.19994123 0.19979696 0.19999835] [0.20089898 0.19889246 0.19993879 0.19909698 0.20117281] ... [0.19948816 0.20006524 0.19998378 0.2000029 0.20045996] [0.1996356 0.19995351 0.19997446 0.20012334 0.20031306]
[0.20026998 0.19984405 0.20024066 0.19988723 0.19975808]]

预值:[4 1 4 1 2 4 4 4 2 4]

如果您仔细查看最后一行,softmax 应该输出“0”作为预测类别,而不是 4,看来类别“0”通常被遗漏了。

知道发生了什么吗?谢谢

标签: pythonkerasdeep-learningword-embedding

解决方案


推荐阅读