在机器学习中,会使用二分类算法的Many-vs-Many (多对多)和One-vs-Rest (一对多)模式来进行多分类。其中,OvR是指将多个标签类别中的一类作为类别1,其他所有类别作为类别0,分别建立多个二分类模型,综合得出多分类结果的方法。MvM是指把好几个标签类作为1,剩下的几个标签类别作为0,同样分别建立多个二分类模型来得出多分类结果的方法。
但是对于神经网络,随着网络层数上升,计算一次分类的成本会变得相当高,并不高效。而且有更好的方法解决多分类问题,即softmax回归
softmax函数
k代表标签数,公式的分子部分是多分类状况下某一个标签类别的回归结果的指数函数,分母是所有标签类别的回归结果的指数函数之和
pytorch调用softmax函数:
softmax要求输入dim参数来明确需要计算的是z矩阵的哪一维数据
会以dim那一维作为一类。比如一个二维tensor,dim=0意味着每一行是一类(softmax后每一列元素之和为1)。dim=1意味着每一个元素是一类(softmax后每一行元素值之和为1)
#z是线性回归后的结果
torch.softmax(z,dim=...)
#或者
from torch.nn import functional as F
F.softmax(z,dim=...
注意!如果自己敲公式想手动实现softmax函数极易出现溢出!建议还是直接使用torch中的softmax函数