【转】一些因素对F1值的影响

article/2025/11/7 3:14:16

截自:https://blog.csdn.net/qq_27590277/article/details/88374695

https://blog.csdn.net/qq_27590277/article/details/88367082

 

一些因素对F1值的影响

如果还没了解F1值的话,这里有我之前写的通俗易懂的文章

详谈P(查准率),R(查全率),F1值

通过控制变量法,对以下因素进行测试:

1.词向量维度,embed_size即Word Embedding size,词被映射到的向量空间的大小

2.因为神经网路要学习到训练文本的每一个细节,这样会导致在文本数量很多的时候,出现过拟合现象。为了避免这样的现象,本文调参采用了dropout方法。Dropout使网络的部分连接部分节点的权重为0,导致该节点失活,从而达到防止过拟合的效果。设置每层神经网络不失活节点比例为x,则dropout=x。将dropout层加入到Embedding层和biLSTM层,防止两者过拟合。

3.隐层里参数的个数即hidden_size。hidden_size越大,训练的精度越高,但是也就会越容易过拟合。所以这些也需要通过调参来选择最好的参数。

4.批处理的大小batch_size,这里表示一批性处理多少训练语料。不同数据量的batch大小不同,batch越大GPU训练速度越快,但是精度可能会降低,所以需要通过调参来决定具体选择的大小为多少。

5.隐藏层的数量hidden_num,数量越大,训练速度越慢,一般很有可能出现过拟合现象。在简单的网络中,一般隐藏层数为1即可,但是也要看看层数为2的效果,不好的话,就用1层隐藏层。所以,这里需要通过调参获得。

6.权重衰退weight_decay,为了防止过拟合,在原本损失函数的基础上,加上L2正则化,而weight_decay就是这个正则化的lambda参数,一般设置为1e-8,所以调参的时候调整是否使用权重衰退即可。

7.修剪梯度clip_grad,为了防止梯度爆炸(gradient explosion)。原理为:损失函数反向传播的时候,使得每个参数都有了梯度gradient,如果所有的梯度平方和sum_sq_gradient大于clip_grad,那么求出缩放因子:

    scale_factor = clip_grad / sum_sq _gradient

    接着改变每个gradient,使每个gradient都乘scale_factor,达到缩放的效果,使每个梯度的sum_sq_gradient都被限制在clip_grad里,来达到防止梯度爆炸的效果。通常设置为10,那么调参的内容为是否需要clip_grad机制。

8.学习率衰退lr_decay,一般设置为1e-8,公式为:

    lr = lr/(1+step*lr_decay)#lr为学习率,step为当前迭代次数

因为一般情况下循环迭代次数越多的时候,学习率的步伐就应该越来越小,这样才能慢慢接近函数的极值点,。但是有时候也不一定会有效,所以这里需要通过调参来查看是否需要开启lr_decay。

9.外部词向量,即提前提前训练好的词向量,这里指word2vec。因为以前自然语言处理用的是one-hot方法进行对每个词进行编码向量化的,维度为1*字典大小,就一位是1其余位都为0,但是这样在数据量大的情况下会让计算机达到难以计算困难的情况,而且每个词都是独立存在的,之间没有计算相似度的可能性。所以Word2vec在2012年被Google提出来,目的是将文本生成词向量模型,其中包括两个模型,分别是CBOW(continous bag of words)和Skip-Gram。这两个模型分别从两个不同的角度建立词向量模型。其中CBOW是通过一个或多个单词的上下文来对这个词进行预测,而这里用的正是CBOW方法训练的词向量。


所以最终选择的参数为:

 

 

这些神经网络调参细节,你都了解了吗

神经网络调参的一些细节问题,特来总结下。主要从weight_decay、clip_norm、lr_decay说起。

以前刚入门的时候调参只是从hidden_size、hidden_num、batch_size、lr、embed_size开始调,但是后来才逐渐明白:

embed_size一般是设置完后不用再调的,比如设定为128后,就不要调了,因为embed_size只是表示将词嵌入到几维的空间而已。

lr也一般都有固定值,比如选取优化器Adam的时候,lr=0.001,选取优化器SGD的时候,lr=0.01,

hidden_num一般设置为1的时候就行,2层以上在简单的网络上只会到的适得其反的效果。

所以剩下该调的也只有hidden_size、batch_size、weight_decay、clip_norm、lr_decay了。但是hidden_size、batch_size大家应该知道怎么调,这里就不讲了。还有其他的调参细节部分,等以后详细用到了再总结给大家。
 

weight_decay
weight_decay即权重衰退。为了防止过拟合,在原本损失函数的基础上,加上L2正则化,而weight_decay就是这个正则化的lambda参数,一般设置为1e-8,所以调参的时候调整是否使用权重衰退即可。这个防止过拟合的正则化我之前和dropout一起讲过的,想要巩固下,点这里。

pytorch实现代码:

self.HyperParams里封装的就是我的所有参数,而decay是这里说的weight_decay,值为1e-8.

对weight_decay我做了实验,数据对比:

F1为一个评测值,想了解的更加详细的,点这里。

可以从实验看出weight_decay还是有点效果的,但不是对所有的试验有效果,所以这也是调参的一部分。

 

clip_norm
clip_grad即修剪梯度,为了防止梯度爆炸(gradient explosion)。

原理为:损失函数反向传播的时候,使得每个参数都有了梯度gradient,如果所有的梯度平方和sum_sq_gradient大于clip_grad,那么求出缩放因子:

接着改变每个gradient,使每个gradient都乘scale_factor,达到缩放的效果,使每个梯度的sum_sq_gradient都被限制在clip_grad里,来达到防止梯度爆炸的效果。通常设置为10,那么调参的内容为是否需要clip_grad机制。

pytorch代码为(只看红框框里的就行):

接整个图的目的是表示在哪里用这个函数。在网络获得损失,并进行后向传播梯度后用该方法,之后进行优化,更新参数即可。

数据对比:

可以看出有那么一丢丢效果。随着不同的数据集,效果还是不一样的。

 

lr_decay

lr_decay学习率衰退,一般设置为1e-8,公式为:

其中,lr为学习率,step为当前迭代次数

因为一般情况下循环迭代次数越多的时候,学习率的步伐就应该越来越小,这样才能慢慢接近函数的极值点,。但是有时候也不一定会有效,所以这里需要通过调参来查看是否需要开启lr_decay。

pytorch代码为:

数据对比:

依然那句话,不是所有的数据集都会有好的效果,需要自己调试,选择适合自己模型的参数。

 

 

 


http://chatgpt.dhexx.cn/article/b9i7DBn3.shtml

相关文章

keras计算precision、recall、F1值

近期写课程作业,需要用Keras搭建网络层,跑实验时需要计算precision,recall和F1值,在前几年,Keras没有更新时,我用的代码是直接取训练期间的预测标签,然后和真实标签之间计算求解,代码…

F1值(F-Measure)、准确率(Precision)、召回率(Recall) 菜鸡版理解

前置知识: T(True): 正确的 F (False) : 错误的 P (Positive) : 正向的/积极的 N (Negetive): 负向的/消极的 则: TP:正确的 预测了 正向的 FN:错误的 预测了 负向的 FP&#xff1a…

准确率、精确率、召回率、F1值学习笔记

一、TN、TP、TN、FP、FN概念 TP与TN都是分对了情况,TP是正类,TN是负类。则推断出,FP是错误的正类,FN是错误的负类。 举例:我们需要从一个班级中的人中寻找所有女生,如果把这个任务当成一个分类器的话,那么女生就是我们…

为何选用F1值(调和平均数)衡量P与R?

二分类问题的性能度量为何选用 F 1 F_1 F1​ 值? 已知混淆矩阵 prediction positiveprediction negativeactuality positiveTrue Positive(TP)False Negative(FN)actuality negativeFalse Positive(FP)True Negative(TN) 其中:Precise(精…

精确度/召回率/F1值/Micro-F1和Macro-F1的理解

如下图所示,假设有若干张图片,其中12张是狗的图片其余是猫的图片.现在利用程序去识别狗的图片,结果在识别出的8张图片中有5张是狗的图片,3张是猫的图片(属于误报). 图中,…

混淆矩阵、精确率、召回率、F1值、ROC曲线、AUC曲线

假设一个分类器A,分类器A的作用是告诉你一张图片是不是汉堡,我们如果想知道这个分类器的效果到底好不好,如何做? 最简单的方法就是将手机里所有的图片都扔给分类器A看,让分类器告诉我们哪些是汉堡 我们无法直观的看到…

python实现计算精度、召回率和F1值

python实现计算精度、召回率和F1值 摘要:在深度学习的分类任务中,对模型的评估或测试时需要计算其在验证集或测试集上的预测精度(prediction/accuracy)、召回率(recall)和F1值。本文首先简要介绍如何计算精…

模型评价指标—F1值

最近空余时间在参加数字中国创新大赛,比赛规则是根据模型的F1值对参赛者进行排名。为了更深刻地理解这个指标,我最近对它做了一些梳理,现在把它分享给更多有需要的人图片。最近在参赛时也发现了一个问题,就是算法在训练集上完全拟…

精确率、召回率、F1 值、ROC、AUC等分类模型评价指标含义与作用详解

文章目录 摘要一、精确率、召回率、F函数、准确率和错误率1、定义2、区别与应用 二、ROC曲线、P-R曲线、AUC1、P-R曲线2、ROC曲线3、AUC 摘要 在涉及机器学习领域的分类问题时(尤其是衡量推荐系统性能时),经常会遇到诸如准确率、召回率、ROC…

机器学习F1值的概念

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、什么是F1-score二、计算过程1.首先定义以下几个概念:2.通过第一步的统计值计算每个类别下的precision和recall3. 通过第二步计算结果计算每个类别下…

【数学建模】分类问题的几种常见指标(一)——准确率、召回率、F1值

分类问题的几种常见指标(一)——错误率、精度、准确率、召回率、F1值 前言1 错误率与精度2 准确率与召回率2.1 混淆矩阵2.2 准确率(Precision)2.3 召回率(Recall) 3 F1值(F1-score)4…

准确率、精确率、召回率、F1值、ROC/AUC整理笔记

文章目录 前言 一、TP、TN、FP、FN概念二、准确率、精确率(精准率)、召回率、F1值1.准确率(Accuracy)2.精确率(Precision)查准率3.召回率(Recall)查全率4.F1值(H-mean值&…

准确率、精准率、召回率和F1值详解

专业术语的中英文对照表 英文名准确率Accuracy精准率Precise召回率RecallF1值F1 measure Precise和Recall是广泛应用在信息检索和统计学分类领域的两个度量值,用来评价结果的质量;F1 measure是综合Precise和Recall两个指标的评估指标,用于综…

matlab color选取(颜色对照表)

只看前面部分,后面的颜色不用看 参考链接:https://wenku.baidu.com/view/111e6c47773231126edb6f1aff00bed5b8f3734e.html

Matlab RGB 颜色对照表(0-1之间取值)

需要说明的是我并非此表的制作者,原链接如上,我也已将原作者信息一并截入图中,此举只是为了扩大此表传播度,所以连标题都没改。此前想找个如此全的对照表找了好久,是同门师妹发给我该链接才知道这张表,感谢…

matlab画图RGB调色

1.使用matlab画图时,怎样才能调出顺眼的颜色呢?反正我之前使用红、绿、蓝三种颜色画图时,真的辣眼睛。下面这图是我根据一篇论文上的图像调的颜色: 我也知道这并不好看,但是可以给各位提个醒、提个方向。 代码也奉上&…

让颜色对应数值,matlab colormap

#问 如何让自己画出的数值对应不同的颜色呢?换话句话说,如何用不同的颜色表示不同的数值呢? 就是让数值的范围对应颜色的范围。 matlab colormap ##标准色 hsv 色彩饱和值(以红色开始束) hot 从黑到红到黄到白 cool …

【Matlab】到底怎么自定义colorbar/colormap的颜色?

1.Introduction 最近在搜混淆矩阵的时候,发现别人做的图研究就是好看。于是乎开始探寻怎么改变图片colorbar的颜色,搜到后面发现其实是改变colormap的颜色,colorbar只是显示而已。 中间也走过不少坑,一把辛酸泪呀~ 2.Materials …

MATLAB | 有关数值矩阵、颜色图及颜色列表的技巧整理

这是一篇有关数值矩阵、颜色矩阵、颜色列表的技巧整合,会以随笔的形式想到哪写到哪,可能思绪会比较飘逸请大家见谅,本文大体分为以下几个部分: 数值矩阵用颜色显示从颜色矩阵提取颜色从颜色矩阵中提取数据颜色列表相关函数颜色测…