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的均值和方差,这样是不对的,大家在跑程序的时候要注意了。
来源:CSDN
作者:seven_zhouyan
链接:https://blog.csdn.net/seven_zhouyan/article/details/104571453