这节课的名称挺有意思,深度学习直觉。
如名称所言,课程中没有介绍具体的深度学习算法,而是主要介绍如何利用深度学习去解决一个实际问题,从数据集、输入、输出、数据结构几个方面讲解了使用深度学习解决问题的思路。不管对于初学者,还是有经验的研发人员,我认为这个思路都是非常重要的。当然我现在也还是初学者,资深开发可能会有更深入的思考,也许还有其他看法。
课程中列举了几个例子:分辨图片的白天和黑夜,识别图片中是否有猫,识别学生的学号,后面可能还有其他的,暂时就看到这里,我先大概总结一下这几个例子的学习心得。
1. 数据集的选择
选择数据集是Kian所描述的解题思路的第一步,其实我个人认为,在选择数据集之前,应该还有一些步骤,比如分析问题是否适合用深度学习方法解决等。不过不管怎么说,选择数据集确实是项目前期非常重要的一环,而且会直接影响到最终的实现效果。
选择数据集大概需要考虑以下几个因素:大小、标注、图片来源、训练集和测试集的划分。
1)数据集大小
数据集多大合适,这个要看问题的复杂程度。比如分辨昼夜,10000张图片就可以了,而识别学生的学号,需要更大的人脸数据集。选择多大合适,Kian并没有很理论的讲解,我认为很大程度上还要取决于开发者的经验吧。
2)图片标注
图片标注虽然看似很简单,但对于深度学习算法而言却是非常重要的。仅仅有训练数据是无法训练出一个智能网络系统的,好比人类学习的过程,需要有人教导,告诉你什么是对的,什么是错的。计算机只能分析数据,通过神经网络,计算机可以将图片的特征提取出来,但也仅此而已,它还需要你告诉它哪些特征是白天的,哪些是黑夜的,它才能最终完成识别工作。
3)图片来源(样本选取)
不同的问题场景,所需要的图片来源不一样。识别猫选取有猫和无猫的照片即可,分辨昼夜需要选取同一个地方白天和晚上的图片,识别学生的学号就比较复杂了,因为摄像头处在不同位置,比如教室、体育馆、走廊等位置,每个地方的背景、角度是不一样的,需要从这些不同的场景中将学生识别出来,每个学生提供多张不同的照片,并且我认为样本不一定局限于该学校的学生,因为学校的学生可能就几千人,样本数不一定足够,可以结合其他人脸数据集一起训练,提升算法的识别准确率。
4)训练集和测试集的划分
这个似乎没啥好讲的,测试集不需要太大,样本数量足够,能体现准确率就行。小一点的数据集,可以采用80/20来划分,大的数据集,甚至可以采用98/2的划分比例。
2. 算法输入
作为一段算法程序,深度学习和其他传统的算法在某些方面并没有太大区别,比如标准化输入。
在原始数据集中,图片的格式、像素以及其他特征可能会存在着很大的区别。以像素为例,神经网络是通过矩阵进行运算的,无法处理像素大小不同的图片,并且像素的大小也直接决定了算法运行的效率,像素越大,矩阵的维数越大,需要消耗的计算资源就越多。因此我们需要将图片转化为统一并且大小合适的格式,在不影响算法效果的前提下,以期最高效地利用计算资源求解问题。
数据预处理不仅限于图片的格式和大小,要具体问题具体分析。比如案例3中的学生人脸识别,在训练算法前还需要对图片中的人脸进行对齐和裁剪,否则训练效果将大打折扣。对于非图像识别的算法而言同样需要预处理,比如文本语义识别,需要去除文本中的标点符号,以及其他的一系列操作。
3. 算法输出
4. 数据结构的选择