深度学习随笔

深度学习中 number of training epochs 中的,epoch 到底指什么?

首先复习下神经网络的概念。 神经网络由一些相互链接的“神经元”组成。每个“神经元”有相应的权重。 神经网络的神奇之处就在于权重是通过训练自动得出的。所谓训练,就是让神经网络在训练 数据集上跑一遍,看看损失函数的值怎么样。如果损失函数的值足够小,小到符合我们的需 求,那就说明神经网络拟合得很好了,训练大功告成了(实际上并非如此,因为仅仅知道拟 合得很好并不够,我们还要知道神经网络是不是拟合得太好了,也就是过拟合。所以还需要 用测试数据集来测试是否过拟合。不过这里就姑且就当训练完成了把。)反之,如果损失函 数的值不够小,那就还需要继续训练。 神经网络在训练数据集上跑一遍,称为一次迭代(iteration)。 那么 epoch 又是怎么回事? 我们知道,简单来说,深度学习就是很深很深的神经网络(这一说法并不准确,但姑且 让我们这么说),也就是说,有很多层,每层可能有很多神经元,结构也可能比较复杂。然 后相应的,数据集也可能比较大。那跑一遍(迭代)会比较慢。所以人们就想出了一个变通 的办法,就是每次只使用数据集中的部分样本,这个数目就称为 batch size。 虽然只使用了部分样本,但很多时候已经足以优化权重,降低损失函数了。这样训练效率高 很多,训练时间也能缩短不少。 不过这样一来,一次迭代就不一定完整跑遍数据集中的所有样本了。那在比较的时候, 就不太方便直接比较迭代次数了。 比如,假设深度神经网络 A 经过 32 次迭代损失函数的值足够低了,而深度神经网络 B 经过 16 次迭代损失函数的值足够低了,但实际上,A 的 batch size 可能是 256,而 B 的 batch size 可能是 2048。所以直接比较 A 和 B 的迭代次数并没有什么意义。 所以就又提出了 epoch 这个概念,指数据集中的所有样本都跑过一遍。 那对于每次迭代都跑遍数据集中的样本的情况,epoch 和迭代是一样的。否则的话, epoch 就要换算。上面的例子中,假设数据集的样本总数是 4096,那 A 的 1 个 epoch 就需 要 16 次迭代,而 B 的 1 个 epoch 只需要 2 次。也就是说,A 经过 2 个 epoch 就训练好了, 而 B 需要 8 个 epoch。
参考-------http://www.360doc.com/content/18/0417/18/47852988_746429309.shtml-------

工程化开发

1.拿到深度学习项目需要考虑些什么?

  1. DL or ML?
  2. DL比机器学习特征提取强
  3. 分析目前的问题
  4. 分析当前数据,现在可用的数据是什么样的(高维的数据?图片?音频?语料?),数据的维度是高维的还是低维的?数据的类型表明了解决方案的类型即第五条
  5. 解决方案属于哪类典型问题(分类?回归?)
    图片数据的处理(获取数据、分析数据)
  6. 尽可能多的获取数据
  7. 观察数据的分布,是否存在分布不均匀
  8. 观察数据的质量,是否有明显的标签错误,是否有大量人类都无法识别的图片
  9. 数据是否需要进行标准化
  10. 标注数据使用什么软件
  11. 标注还在

选择模型、模型调优

  1. 确定问题目标:图片分类?目标检测?实例分割?
  2. 确定主要约束条件:求准还是求快?在Server还是在嵌入式设备?算力如何?内存是否足够?
  3. 目前已经是最好效果了吗?还是可以再一进步提高精度?过高的训练精度是否是过拟合了?过高的预测精度是不是会导致泛化能力不足?
    ●上线效果
    ●从系统吐出的错误中查找问题
    ●人脸识别问题。总不能识别的场景。灯光太强?太暗?人脸不正?
    ●图片分类问题。把分类错误的图片收集到,仔细观察图片,看是不是标签了?过于模糊? .
    ●目标检测问题。某些物体总是识别不出来。是不是目标太小了,太大了,太长了?

2.1数据预处理
去掉错误数据,采集数据通常可能采集回来错误的值,人工标注也容易标注错误,宁肯漏标也不要错标,去除有争议的数据(猫和hello kitty的对比),人类也无法处理的数据(有些图像的预测概率在0.5-0.6之间,理论上可能是这个图像表现出不止一个类别,所以模型给他们分配了相同的概率),训练的时候尽量多选择特征明显的图片,偶尔加入一些不好分类的图片也可以。如果数据集中大部分数据都是肉眼都不好分类的图片的话,模型训练的效果应该就是不好的。

2.2数据扩充
为什要数据扩充,就是数据量不够。
数据是深度学习的粮食
数据量不够—数据增强
数据分布不均衡----数据均衡
2.2.1简单的数据扩充方式
1.水平翻转(horizontally flipping):会使原数据集扩充-倍。
2.随机抠取(random crops): -般用较大(约0.8-0.9倍原图大小)的正方形在原图随机位置抠取图像(image patch/crop),每张图像抠取的次数决定了数据集扩充的倍数。
3.旋转(rotating):将原图旋转一-定角度(-30°, 30°), 将经旋转变换后的图像作为扩充的训练样本加入原训练集。
4.色彩抖动(color jittering):在RGB颜色空间对原有RGB色彩分布进行轻微的扰动,或在HSV颜色控件随机改变原有图像饱和度和明度或对色调进行微调。
在实践中,往往会将上述几种方式叠加使用。如此,便可将图像数据扩充至原有数量的数倍甚至数十倍。
5.色彩抖动的其他预处理
●当我们获取了足够的训练样本后,在训练前,还有些操作是必不可少的一步。
●比如:减均值操作。
●具体这样操作:计算数据集的像素均值,然后让训练集、验证集、测试集分别减去该均值。
●减均值操作的原理是,我们默认自然图象是一类平稳的数据分布,此时从每个样本.上减去数据的统计平均值可以移除共同部分,凸显个体差异。
2.2.2其他的数据预处理方法
●对输入特征做归一化处理(normal ization)也是常见的预处理操作,同样在图像处理中可以将图像的每个像素信息看作–种特征。
●在实践中,对每个特征减去平均值来中心化数据的归- -化处理方式称为“中心式归一化”(mean normal ization)。
●需要注意的是,实际操作中应首先划分好训练集,验证集和测试集,该均值仅针对划分后的训练集计算,不可再未划分的所有图上计算,如此会违背机器学习的基本原理,即“在模型训练过程中能且仅能从训练集中获取信息”。

样本不均衡的弊端
●经典算法通常假设各类数据是均衡(平衡)的,即每个类别的样本数量是-样多的●然而,实际工程多数情况样本是不均衡的
●不均衡导致泛化能力弱:
●训练出的模型只会重视样本多的类别
●轻视样本少数的类别
●比喻:
●上高中偏科,总数学,偶尔学英语
●高考的时候英语也是要考的
●极端的例子:
●二分类问题:训练集中,正例( 99个少, 负例:/1个
●分类器只要放弃负例的预测就可以获得99%的正确率●二分类问题:训练集中,正例: 1个,负例: 99个
●分类器只有1%的正确率,这个分类器没法用
样本不均衡的应对—把数据数量拉平
●样本数量过少的想办法扩充数量(_上采样)
●直接复制类别较少的图片
●数据扩充的方式
●样本数量过多的想办法减少数量(下采样)
●有针对性的挑选图片进行训练
下采样
下采样不是丢弃图片(数据是宝贵的资源,仍数据就像扔钱)
正例和负例的比例为5:1
那么不是简单的丢弃4张正例,使得图片比例变为1:1而是每轮训练的时候从5个中随机抽取一张猫,多轮训练

迁移学习

Layer Normalization 与Batch Normalization的区别:LN是在输入神经元之前就计算了均值和方差,BN是对同一批的数据计算均值和方差。
在这里插入图片描述
简单的来说就是BN和LN进行处理的方向不同。对于BN来说,batch_size大小不同,那么它对应的BN出来的mean和std都是变化的,上图中batch_size=3,均值是mean=3,std=3(第0维度),当batch_size不是3的时候,那么均值和方差就会改变;而LN随着batch_size的不同对应单条样本的均值和方差不同——————BN对batch比较敏感,batch_size不能太小;LN则是独立于batch_size的———就可以这么理解。参考:关于batch normalization和layer normalization的理解
如果前面有学过Batch Normalization,则会发现其实Layer Normalization并没有什么新奇的地方,只是两者计算均值和标准差的对象不一样。最后还是总结一下:

Layer Normalization可以提高模型的训练速度和精度,使得模型更加稳健。
Layer Normalization可以适用于单样本的情况,在RNN中效果比Batch Normalization更优。
参考:Layer Normalization原理介绍

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

饿了就干饭

你的鼓励将是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值