iamstarlee / Multi-label-Sewer-Classification

This repository is based on sewer-ml dataset
https://vap.aau.dk/sewer-ml/
MIT License
17 stars 1 forks source link

测试结果 #10

Closed qianmeng19 closed 5 months ago

qianmeng19 commented 6 months ago

image 1716196910997 我的测试结果如图,这种结果是不是无效的?

iamstarlee commented 5 months ago

是测试集的结果吗?测试集没有ground truth,只能用验证集验证测试两用

qianmeng19 commented 5 months ago

是的是测试集结果,我使用Train13和Train13作为训练集和测试集,使用Xie2019模型,结果却如图,不应该是为0或者1才是对的嘛

iamstarlee commented 5 months ago

模型的输出结果会经过sigmoid激活到0~1之间,0或者1是真值,模型好的预测只会很靠近0或者1,几乎不会为0或者1

qianmeng19 commented 5 months ago

那怎样的结果才是模型好的预测呢

qianmeng19 commented 5 months ago

可以看看博主的测试结果吗

iamstarlee commented 5 months ago

https://github.com/iamstarlee/Multi-label-Sewer-Classification/blob/cd4bd6ba32ef42ba5d4a909e7c7d8bec85367d2d/metrics.py#L124-L126 需要先用inference.py进行推理,然后用calculate_results.py计算推理结果,从而判断模型的好坏,metrics.py里计算指标的时候会把高于阈值的算为正样本,低于的算为负样本

iamstarlee commented 5 months ago

Snipaste_2024-06-06_09-39-48 我在计算指标之前就用阈值将结果置为0或者1了

qianmeng19 commented 5 months ago

感谢博主分享,请问怎样在计算指标之前就用阈值将结果置为0或者1,还有就是阈值一般设置为多少

iamstarlee commented 5 months ago

https://github.com/iamstarlee/Multi-label-Sewer-Classification/blob/cd4bd6ba32ef42ba5d4a909e7c7d8bec85367d2d/metrics.py#L99-L129 第125行,Np[k]是第k类的Total number of Predictions,这里就是在取预测值大于阈值(一般为0.5)的结果

qianmeng19 commented 5 months ago

感谢博主的回答,但我想像博主一样将[metrics.py]中的评估函数运用到inference.py中进行推理,需要怎样修改代码呢

iamstarlee commented 5 months ago

运行inference.py就会得到推理结果,再运行calculate_results.py就能得到推理结果的指标,里面会调用metrics.py

qianmeng19 commented 5 months ago

会不会出现inference.py就会得到推理结果很差,但是运行calculate_results.py得到的结果也还行。我想知道calculate_results.py的具体计算公式,论文里有吗

qianmeng19 commented 5 months ago

请问博主是使用了所有数据集进行训练吗

iamstarlee commented 5 months ago

calculate_results.py是基于inference.py的结果计算的,calculate_results.py的计算公式都在metrics.py里,论文的附录里有

iamstarlee commented 5 months ago

我是用的整个数据集训练的

qianmeng19 commented 5 months ago

请问博主试过只使用一个文件train13训练吗,我使用一个文件训练的结果好像不行

qianmeng19 commented 5 months ago

请问博主执行calculate_results.py时遇到这个报错是结果有问题吗E:\Multi-label-Sewer-Classification-main\metrics.py:173: RuntimeWarning: invalid value encountered in scalar divide F2_normal = (5 precision_k[-1] recall_k[-1])/(4*precision_k[-1] + recall_k[-1])

iamstarlee commented 5 months ago

这种看上去像除了0,可以试着print分母的precision和recall

iamstarlee commented 5 months ago

train13是我从原始数据集中摘出来的子集,可能因为数量少导致效果不好