这是我用torch和keras训练DNN的代码。我用它们训练同样的数据,但最后得到完全不同的AUC结果(keras版本达到0.74,torch版本达到0.67)。所以我很困惑!而且我试了很多次,我的结果仍然是不同的。这两个模型有什么区别吗?第一个
eufgjt7s1#
网络的结果取决于权值初始化方案,Keras和Pytorch有不同的权值初始化方案,Keras使用Glorot,Pytorch使用Kaming。即使使用相同的方案,结果也不会相同(但会接近),因为每次开始新的训练时,权重初始化都会不同。
m1m5dgzv2#
最后我找到了我遇到的错误的真实的原因,它与模型结构或参数无关,实际上sklearn的roc_auc_score函数的错误输入才是导致这个错误的直接原因。我们知道,sklearn.metrics.roc_auc_score至少需要y_true和y_score,其中y_true是数据集的真实的标签,y_score是标签1的预测概率(对于二进制任务)。但是,当我使用torch的输出来计算两个指标(准确性和AUC)时,我将输出转换为0-1向量,所以我的y_score不再是概率,而是0-1向量。然后错误发生了......
sklearn.metrics.roc_auc_score
y_true
y_score
2条答案
按热度按时间eufgjt7s1#
网络的结果取决于权值初始化方案,Keras和Pytorch有不同的权值初始化方案,Keras使用Glorot,Pytorch使用Kaming。
即使使用相同的方案,结果也不会相同(但会接近),因为每次开始新的训练时,权重初始化都会不同。
m1m5dgzv2#
最后我找到了我遇到的错误的真实的原因,它与模型结构或参数无关,实际上sklearn的roc_auc_score函数的错误输入才是导致这个错误的直接原因。
我们知道,
sklearn.metrics.roc_auc_score
至少需要y_true
和y_score
,其中y_true
是数据集的真实的标签,y_score
是标签1的预测概率(对于二进制任务)。但是,当我使用torch的输出来计算两个指标(准确性和AUC)时,我将输出转换为0-1向量,所以我的
y_score
不再是概率,而是0-1向量。然后错误发生了......