然后一个卷积层应用这些卷积运算。在第一层中,我们对输入图像应用 32 个大小为 5 的核,产生了 32 个大小为 60 x 60 的输出。(由于边界效应,每个卷积图像尺寸有所减少) 我们还使用了最大池化层( max pooling layers),通过获得其最大值简单地将张量区域减少到单个区域(图 17)。因此,在应用一个 2 x 2 的最大池化层之后,我们得到原始大小四分之一的张量。 图 17:最大池化运算的示例 最后,我们将张量展平为一维,并将其连接到密集连接层以用于预测。我们最终层的大小为 18,与输出域大小相同。 训练和检验 为了实现我们的模型训练,开奖,我们要将数据集分为两部分: (1)「训练数据集(training dataset)」将使用我们的训练算法从数据中学习模型参数;(2)「验证数据集(validation dataset)」将用于评估未知的数据的模型性能。这样,我们将能够识别过拟合问题(相信我,我们将看到很多过拟合[4])。 但是我们不能随意地选择精灵的随机样本。来自同一精灵宝可梦的精灵,在不同游戏中彼此非常相似,特别是在同一代游戏之间(图18)。 图18:来自精灵宝可梦白金版(左)和钻石版(右)的大比鸟(Bird Jesus)。等等...这是另一回事吗? 框1:表现测试指标 本文我们使用三个指标来评估我们的模型表现: (1)准确度(Accuracy):获得精灵宝可梦正确属性分类的预测的百分比; (2)精度(Precision):归类为真正属于该类(属性)的图像的百分比; (3)召回率(Recall):归类为该类(属性)的图像的百分比。 准确度使我们能够得到模型的总体质量,精度和召回率用于衡量我们的模型的每个类的预测。 如果我们随机选择精灵,则会有使用与训练集相同精灵污染测试集的风险,这将导致对未知数据的模型表现的高估。因此,我对精灵宝可梦样本进行了挑选。也就是说,我将整个精灵宝可梦分配到了同一个集合,而不是分配单个精灵。这样,如果喷火龙被分配给测试集,它对应的所有精灵都将跟随,从而消除了污染的风险。 我使用了20%的精灵宝可梦作为测试样本,80%作为训练集,也就是有 2727 个精灵用来训练。 第一个模型:裸骨训练 在第一次尝试中,我用原始精灵的图像训练算法,同时保持训练/测试分开。该算法训练超过了20个 epoch [5],总共花了大约一分钟[6]。第一个训练获得的结果在图19中给出(参见框1表现度量查看解释)。
图19:第一次尝试中训练集的表现 结果令人吃惊!我们得到的所有分类都是正确的!但是这些指标能很好地估计未知数据的模型性能吗?那些指标是否显示,我们的模型学习训练样本,但对新数据适应不佳?扰乱警报:确实如此。让我们来看看它:图20展示了那些和我们验证集相同的度量。 看来,我们的模型确实过拟合了训练集,即使它的表现优于随机猜测。
图20:第一次尝试验证集的表现 但等一下......为什么我们没有任何飞行属性的精灵宝可梦?事实证明,只有一个精灵的主要属性是飞行(图21,龙卷云(Tornadus)),它被包括在了训练集中。 图21:在飞行属性中,龙卷云是独一无二的。 第二个模型:图像增强 (责任编辑:本港台直播) |