设置一定数量的神经元
在 k 折交叉验证中计算某些性能指标的平均值
用不同数量的神经元重复这个过程
交叉验证很重要,因为使用它我们可以确保模型不会过拟合或欠拟合。
这个过程非常类似于超参数调优,因为隐藏层中的神经元数量实际上是一个要调优的超参数。
现在让我们看看如何在 Python 中实现这个过程。
在 Pytho n 中的示例
在这个例子中,我将展示如何使用 scikit-learn 库优化 Python 中的神经元数量。事实上,你也可能会使用 Keras 来构建神经网络,但概念是完全相同的。
我将使用 scikit-learn 中包含的乳腺癌示例数据集。
首先,让我们导入一些有用的库。
然后,我们可以加载我们的数据集,并将其分成训练集和测试集。
现在,我们必须定义我们的模型。在本例中,我将使用一个简单的带有单个隐藏层的多层感知器。为了简单起见,构造函数的所有参数都保留在它们的标准值中。我只是设置随机状态,以确保结果的可重复性。
在将数据集提供给神经网络之前,不要忘记缩放特征。为简单起见,我将在 scikit-learn 中使用 Pipeline 对象,然后应用标准化。
现在,我们必须通过搜索最佳神经元数量来优化我们的网络。请记住,我们尝试了几种可能的数字并计算交叉验证中性能指标的平均值。最大化这样一个值的神经元数量就是我们正在寻找的数量。
为此,我们可以使用 GridSearchCV 对象。由于我们正在处理二元分类问题,因此我们要最大化的指标是 AUROC。我们将以 2 的步长跨越 5 到 100 个神经元。
)
最后,我们可以寻找最佳的神经元数量。
搜索结束后,我们会得到最好的平均分,即:
神经元的最佳数量是:
最后,我们可以在测试数据集上计算这样一个模型的 AUROC,以确保我们没有对数据集进行过多的处理。
我们得到的值仍然很高,所以我们很确定优化后的模型已经泛化了训练数据集,从它携带的信息中学习。
总结
优化神经网络可能是一个复杂的任务。在这篇文章中,我已经解释了一种优化神经元数量的可能方法,但是同样的概念甚至可以应用到其他超参数(比如激活函数、小批量大小、时代数量、学习速度)。记住,超参数的数量越多,优化的速度就越慢。
欢迎加入Imagination GPU与人工智能交流群
群已满200人,入群请加小编拉进群,
小编微信号:eetrend89(添加请备注 公司名和职称)
推荐阅读
Imagination 2021年开发者专刊
END
Imagination Technologies是一家总部位于英国的公司,致力于研发芯片和软件知识产权(IP),基于Imagination IP的产品已在全球数十亿人的电话、汽车、家庭和工作场所中使用。获取更多物联网、智能穿戴、通信、汽车电子、图形图像开发等前沿技术信息,欢迎关注 Imagination Tech !
关注我们返回搜狐,查看更多