现在我们处理好了所有的精灵图像,来建立我们的图像数据集,接下来我们根据要预测的变量来对它们进行分类。在本文中,我们将仅使用其图像来判断出每个精灵的正确属性。在图7中,我们尝试使用边界框内的图像,将小精灵正确地分类到18个属性中的一种。 △ 图7:精灵及其对应属性 上行:妙蛙草(左)和波波(右) 下行:大钢蛇(左)和菊石兽(右) 但是仍然存在一个问题,大多数精灵具有双重属性,也就是说,一个精灵的正确属性是在18种属性中某两种不同属性的组合。例如在图7中,妙蛙草的属性是草和毒,同时具有两种属性的优点和弱点。 如果要解决这类情况,我们就需要对组合属性进行分类。即使我们忽视属性顺序,把[火 岩石]属性与[岩石 火]属性分为同一个类,除去不存在的组合,我们最终会得到154个可能的类。 更糟的是,如图8所示,一些组合是罕见的,只有一个或两个神奇宝贝,这样限制了可供学习的样本。 △ 图8:一些罕见的属性组合 上行:熔岩蜗牛(左)和溜溜糖球(右) 下行:花岩怪(左)和火钢兽(右) 由于上述原因,我决定忽略精灵的组合属性。因此,我们只考虑精灵的主要属性。以图7中的小精灵为例,我们将这样设置: 妙蛙草:草 波波:一般 大钢蛇:钢 菊石兽:岩石 模型训练 选择模型我将通过卷积神经网络实现对数据集的预测。首先,我们来了解一下神经网络。 根据维基百科的介绍,神经网络是一种常用的机器学习预测模型,本质上是由称为神经元的简单单位组成的互连网络。通过对生物系统内部运作的简单模拟,神经网络能够通过这些神经元来实现复杂的函数和模式。 神经元的最简单形式只是一个输入的线性函数,可以通过组合实现非线性激活函数,如下图:
△ 图9:神经网络的基本单元 然而,通过加深网络层数,神经网络能够在独立变量和因变量之间构建越来越复杂的对应关系,如下图: △ 图10:一个稍微复杂的,具有一个隐藏层的神经网络结构 从1940年开始,就已经有学者研究神经网络,但是存在局部最优和计算量过大的问题,所以一直发展缓慢。近年来,随着计算性能的大大提高,以及反向传播算法的提出和发展,神经网络又再一次受到了大量学者的关注。 好的,我们已经比较了解神经网络了。但是“卷积”指的是什么呢?我们先来介绍一下内核。 在图像处理中,内核,也叫作卷积矩阵,是在模糊、锐化、边缘检测等任务中使用的小型矩阵。我们通过设定合适的内核进行矩阵的卷积运算,产生新的图像从而实现目的效果。在前边的步骤中,我们已经用过了一种内核:在数据预处理中用Sobel内核来检测精灵的边缘。 △ 图11:精灵妙蛙花在应用Sobel算子后的效果 (责任编辑:本港台直播) |