PyTorch深度学习实践(b站刘二大人)P9讲 多分类问题 Softmax Classifier_努力学习的朱朱的博客-CSDN博客
自学,侵删
在Mnist数据集中,我们要得到的输出是0-9,共有十类,这种情况下我们希望输出0-9的概率>=0,且和为1
使用SoftMax分类器进行多分类问题(其输入不需要Relu激活,而是直接连接线性层),经过SoftMax分类器后满足:1.大于等于0,2.所有类别概率和为1.
NLLLoss(nagative log likelihood loss ):右边输入 Y是真实标签,另一个输入要求是 softmax之后求对数
在PyTorch中,交叉熵损失全部封装成了Torch.nn.CrossEntropyLoss() ,上图的交叉熵损失就包含了softmax计算和右边的标签输入计算。
所以在使用交叉熵损失的时候,神经网络的最后一层是不要做激活的,因为激活(就是把它做成分布),是包含在交叉熵损失里面的,最后一层不要做非线性变换,直接交给交叉熵损失。
举例:
3个类别,分别是2,0,1
Y_pred1 ,Y_pred2还是线性输出,没经过softmax,还不是概率分布,比如Y_pred1,0.9最大,表示对应为第3个的概率最大,和2吻合,1.1最大,表示对应为第1个的概率最大,和0吻合,2.1最大,表示对应为第2个的概率最大,和1吻合,那么Y_pred1 的损失会比较小
对于Y_pred2,0.8最大,表示对应为第1个的概率最大,和0不吻合,0.5最大,表示对应为第3个的概率最大,和2不吻合,0.5最大,表示对应为第3个的概率最大,和2不吻合,那么Y_pred2 的损失会比较大
CrossEntropyLoss与NLLLoss的总结_街道口扛把子的博客-CSDN博客_f.nll_loss
PyTorch读图像用的是python的imageLibrary,就是PIL,现在用的都是pillow,pillow读进来的图像用神经网络处理的时候,神经网络有一个特点就是希望输入的数值比较小,最好是在-1到+1之间,最好是输入遵从正态分布,这样的输入对神经网络训练是最有帮助的.
在视觉里面,灰度图就是一个矩阵,但实际上并不是一个矩阵,我们把它叫做单通道图像,彩色图像是RGB三通道图像,通道有宽度和高度,一般我们读进来的图像张量是WHC(宽高通道)
在PyTorch里面我们需要转化成CWH,把通道放在前面是为了在PyTorch里面进行更高效的图像处理,卷积运算
损失不断降低。测试的准确率上升!但最后准确率上不去是因为对图像用全连接神经网络忽略了对局部信息的利用,把所有的元素都全连接了,处理时权重不够多,处理图像时更关心高级别的特征~如果特征提取会好一点~人工特征提取方法:傅里叶变换、小波变化,深度学习中可以自动特征提取