计算机视觉 - 06 前向传播( Forward Propagation)、分类模型、交叉熵、标准化(学习笔记)

我与影子孤独终老i 提交于 2020-03-01 21:10:42

1、图片在卷积神经网络中是怎么变化的(前向传播 Forward Propagation)
代码详见:
https://zhuanlan.zhihu.com/p/34222451

2、分类模型 Loss 函数为什么要用 交叉熵Cross Entropy?
https://zhuanlan.zhihu.com/p/53045651
(1)分类模型 与 Loss 函数的定义监督学习的 2 大分支:
分类问题:目标变量是离散的。
回归问题:目标变量是连续的数值。
为了训练模型,必须先定义衡量模型好与坏的标准。
在机器学习中,我们使用 loss / cost,即, 当前模型与理想模型的差距。
训练的目的,就是不断缩小 loss / cost.
(2)为什么不能用 classification error
在这里插入图片描述
classification error 很难精确描述模型与理想模型之间的距离。

(3)Cross-Entropy (交叉熵)的效果对比
在这里插入图片描述
ACE 结果准确的体现了模型 2 优于模型 1。
cross-entropy 更清晰的描述了模型与理想模型的距离。

(4)为什么不用 Mean Squared Error (平方和)
在这里插入图片描述
分类问题,最后必须是 one hot 形式算出各 label 的概率, 然后通过 argmax 选出最终的分类。 (稍后用一篇文章解释必须 one hot 的原因)在计算各个 label 概率的时候,用的是 softmax 函数。
在这里插入图片描述
如果用 MSE 计算 loss, 输出的曲线是波动的,有很多局部的极值点。 即,非凸优化问题 (non-convex)
在这里插入图片描述
cross entropy 计算 loss,则依旧是一个凸优化问题,用梯度下降求解时,凸优化问题有很好的收敛特性。
在这里插入图片描述
在这里插入图片描述
总结
分类问题,都用 onehot + cross entropy
training 过程中,分类问题用 cross entropy,
回归问题用 mean squared error。
training 之后,validation / testing 时,使用 classification error,更直观,而且是我们最关注的指标。

3、标准化(Normalization)
https://zhuanlan.zhihu.com/p/35597976
在这里插入图片描述
在这里插入图片描述
Z-score 怎么用python 代码实现:实现时有2种不同的方式:
(1),使用sklearn.preprocessing.scale()函数,直接将数据进行标准化。
(2),使用sklearn.preprocessing.StandardScaler类,其优点可以保存训练数据中的参数(均值、方差),也可以直接使用其对象转换(transform)其测试集数据。
在这里插入图片描述
在这里插入图片描述
大家看上面两只猪,对于人来说,它就是两只一样的猪,只是图片的灰度或者曝光度不一样罢了,于是我们都给它们都标注为社会人.
由于曝光的,灰度等各种原因,他们像素值其实不一样,那么经过卷积层后,他们的特征很可能不一样。
在这里插入图片描述
另一种情况:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当然,我上面就是举了两个例子,还有很多情况需要进行标准化才能解决,标准化常用的是Z-Score, 记住,这是要减去自己数据的均值和除以自己的标准差(不是方差)
PS:大家在用Fine-tune pretrained model,比如Imagenet, 程序里面经常是减去的Imagenet的均值和方差,这样是不对的,大家在跑程序的时候要注意了。
在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!