sp3.2 Structuring Machine Learning Projects

误差分析:算法还没达到人类水准
人工看误差中错误的是什么 识别猫的,假设100个错误中只有几个误判为狗的 就不考虑单独为狗再做个训练 但是错误中一半都是狗的 可以集中精力优化狗的 专门加点狗的进去
只看错误的 统计一下能让你心里有数 对性能提升 心里有个数 选出最重要的方向 或者看看提升空间
 
 
清理数据 有些是标签标错了
对于训练集 要是随机误差 一般没事 因为深度学习很好的健壮性(鲁棒性)
但是系统性误差 比如一直把白色的狗标记为猫 这就不行了
 
对于验证集或者开发集 可以在误差分析里 多加一列
 
 
看这三组数据
如果小的话其实也不用管,看整体的误差比如10%,标记错误占的6%,所以只有0.6%的错误 不用管了 先处理别的误差; 再如现在只有2%的整体误差,0.6%就不少了
 
快速建立一个原型系统,然后快速迭代 不要想太多太复杂一开始
开发集的目的在于瞄准目标
 
比如很多图片从网页上挖下来几十万 但是用户手机上传只有一万 把这数据混起来再分布 其实也不是一个好方法,虽然分布现在相同了,但是如果我们针对优化手机上传的 占比太小了 这算法还是不行
现在让手机上传的 全作为开发测试集 缺点就是现在分布不同了
左边的老数据 右边数据 分布不同可以按照上面方法分 但是两万也不少了 也可以取一半扔训练集里
 
 
若是同一分布,可能就是出现较大方差了
但不是统一分布,原因就多种了 1 只见过训练集没见过dev, 2 两者分布不同
现在要新定义一组新的 叫做训练开发集
打乱训练集 取一部分叫做训练开发集 这时候要是这个新的还高 就是方差问题了
要是两者接近 而dev差别大 就是数据不匹配问题 dev的分布和训练集分布不同
分别看可避免偏差 方差 数据不匹配 是否过拟合
 
定位数据不匹配:亲自去看dev sets分析下区别是什么 把训练集变得像dev一点 可以人工合成数据
 
 
迁移学习:同一个神经网络把输出层换一下 应用到别的任务上去
主要用在新任务数据太少了 比如几百个 就用相关的神经网络
如果新的训练数据少 只用来训练最后一两层的参数 甚至加几个新层/新节点等
 
迁移学习是串行的 一步完才一下步
多任务学习并行的,一张图片识别多个物体 输出就是多维的
 
 
端到端的深度学习end to end:省去了中间步骤 前提数据要多 以前还要处理数据比如对音频
 
两步更好
还比如端到端 翻译方面
 
优缺点:可以简化系统 但需要大量数据

猜你喜欢

转载自www.cnblogs.com/hellodantong/p/9965234.html