家居装修

禅与奶罩识别艺术下注意

2020-11-19 06:26:48 来源: 南京家居网

禅与奶罩识别艺术(下)

按:本文作者Kaiser,景略集智总经理,原文载于集智专栏,已获授权。

过拟合/欠拟合之前介绍了卷积提取边缘特征的基本原理,但这还远远不足以从图片中识别出奶罩,因为并不是所有奶罩都像柏木由纪的那么简单朴实,而是存在很多种不同的款式,这不是单从边缘就能识别出来的。

要提取如此复杂的特征,需要很多不同的卷积核。巧妇难为无米之炊,没有足量的训练样本,再好的卷积也出不来。训练样本当然是越多越好,有道是“熟识奶罩三百款,不会解扣也会穿”。人工神经络虽然不具备真正的人格,但有一点却是相通的,那就是“贪”。

但不管是训练样本的累积,还是计算能力的上限,资源总是有限的。所以我们始终只能从有限多个样本中,提取一小撮特征,这是一个以有涯求无涯的过程。

训练样本不足就会产生一个问题,叫作“少见多怪”。比如我们看上面几张图里的奶罩,大多是有肩带的,那么自然地,神经络会把“肩带”当作一个特征。

如果一个物体没有类似肩带的结构,被认作奶罩的概率便会下降。

引入过多不必要的特征,导致模型泛化能力(Generalization)下降,这一问题叫作“过拟合”(Overfitting)。比如下图,坐标上有10个点,蓝色拟合曲线逐一穿过,看起来像一个完美的拟合,似乎我们已经看透了这一分布规律的本质。

但是如果有第11个点,它真的会继续落在蓝线上吗?而且一旦没有,那么拟合曲线就面临严重的威胁,需要很大的调整才能满足“穿过所有点”。如果有第12个点呢?

这种过拟合的预测对于都是很难具备的。在这一点上新数据的作用有限,实际上一个比较稳妥的拟合是线性关系,我们有很大把握预测,第11个乃至以后的数据,都会落在蓝色直线附近。

过拟合就好比背过了历年的考试题(包括所有数字),但是一见到新题目(数字变了)就不会做了。以前有个傻子卖咸鸭蛋的小品,里面傻子说“五毛钱俩,一块钱不卖”,这就是钻进了“五毛钱俩”的牛角尖而产生的笑话

。过拟合的神经络,就像一个认死理稿源:中国青年的人,实则是愚痴的。

所幸,人工智能还没有发展出情态,否则恐怕就“贪、嗔、痴”三毒俱全了。我想,如果真的有那一天,机器人也会发展出宗教吧(遁入智瞳)。

反过来的情况叫“欠拟合”(Underfitting),就是没有学习到真正的规律,听风就是雨。比如下图这个把眼罩当成奶罩的惨案,买家确实没有把“肩带”当作特征,“形状”也确实有点类似,但是她把最基本的“大小”因素忽略了。

在实际应用当中,“过拟合”是更加常见的问题。

脱掉如何遏制过拟合?方法有很多,比如 L1、L2 正则化(Regularization)是在代价函数(Cost Function)上动手脚。

本文要介绍的方法,叫作Dropout。其原意是辍学,中文资料里基本也都保留了原词,“脱掉”是我自己想的翻译。你问我怎么想的,我也不知道,只是管不住我这手。

Dropout不修改代价函数,而是直接调整神经络的结构,是一种更加彻底的革命。

人工神经元都是与特征相关的,而有的特征(比如肩带)会造成过拟合。那么只要脱掉肩带所对应的的神经元,不就可以避免了吗?

理是这么个理,但是我们并不知道,具体哪些神经元对应哪些特征。如果我们都知道的话,也就不用训练了,直接求解就行了。

考虑下面这个简单的神经络,其隐藏层(中间那层)有6个神经元。神经元与特征并非一一对应的,可能3个神经元共同表征1个特征,比如从上数第2、3、5个。假设我们抛掉了这三个神经元,用其余的络进行计算,就可以在一定程度上降低过拟合。

实际上这里的[2, 3, 5]只是猜测,我们要做的是,把所有能脱掉的3神经元组合,全都脱一遍,对剩余部分分别进行计算,最后再求平均。诚然,每一个经过Dropout的不完整神经络,还是有可能过拟合,但是各自的过拟合情况是不同的,通过求平均就可以抵消。

本质上,Dropout消解了神经络对某一部分神经元的依赖性。6个神经元dropout其中3个,此时dropout率即是 0.5。

实践实践是检验罩杯的唯一标准,但是对于广大新手而言,直接处理彩色图片的难度还是偏高,而且本站的计算能力暂时还很有限。所以这里改用手写数字识别项目作为案例,搭建简单的卷积神经络,并且对比Dropout的效果。

该项目是Kaggle的入门级比赛,且用到了著名的MNIST手写数字数据集。MNIST可谓是深度学习界的Hello World。

首先导入依赖库和数据集,并进行预处理,以便神经络模型使用。

此为静态代码展示,-运行Python代码,搭建神经络,请访问:链接。

然后构建、训练模型。这里采用一个最简单的卷积神经络结构:

卷积层(8个5x5卷积核,ReLU激活函数)

池化层(2x2最大池化)

全连接层(16个神经元,ReLU激活函数)

输出层(10个神经元,SoftMax激活函数)

为节省计算开销和减少等待时间,训练的迭代次数已设为1,所以得到的各项结果参数当然偏低,这并非所用的方法有问题。

无Dropout,验证精度为:0.6090

Dropout作为对比,我们搭建另外一个架构类似、但包含Dropout层的神经络。Dropout的位置是最大池化层之后、全连接层之前。

此处代码留空,请访问链接, 完成练习。

如果正确地添加了Dropout,则得到的验证精度(val_acc)应为0.7390。而其他的指数,如训练精度(acc)却大致相等。可见,Dropout的作用是消解过拟合,提高模型泛化能力。

PS.如果要给本文配一个BGM,我希望是杜德伟的《脱掉》。

(公众号:):

TensorFlow 神经络算法高级应用班” 要开课啦!

从初级到高级,理论 + 实战,一站式深度了解 TensorFlow!

本课程面向深度学习开发者,讲授如何利用 TensorFlow 解决图像识别、文本分析等具体问题。课程跨度为 10 周,将从 TensorFlow 的原理与基础实战技巧开始,一步步教授学员如何在 TensorFlow 上搭建 CNN、自编码、RNN、GAN 等模型,并最终掌握一整套基于 TensorFlow 做深度学习开发的专业技能。

两名授课老师佟达、白发川身为 ThoughtWorks 的资深技术专家,具有丰富的大数据平台搭建、深度学习系统开发项目经验。

时间:每周二、四晚 20::00

开课时长:总学时 20 小时,分 10 周完成,每周 2 次,每次 1 小时

线上授课地址:

CNN 在基于弱监督学习的图像分割中的应用

看了这篇文章,了解深度卷积神经络在目标检测中的进展

版权文章,未经授权禁止转载。详情见转载须知。

抚州男科医院
服用氨氯地平阿托伐他汀钙哪些不良反应
渭南治疗白斑病费用
本文标签: