引言

神经网络是机器学习的一个迷人的领域,但是它们有时很难优化和解释。事实上,它们有几个超参数。要优化的最常见的超参数是隐藏层中的神经元数量。让我们看看如何为我们的数据集找到一个神经网络的最佳神经元数量。

什么是神经网络?

神经网络是一种特定模型,它可以根据一层神经元来捕捉特征与目标之间的相关性,从而转换数据集。一个神经网络是由几层神经元组成的。每个神经元获取一些输入,转换它们并返回输出。一个神经元的输出可以成为下一层神经元的输入等等,构建越来越复杂的架构。

第一层称为输入层,由返回特征值本身的神经元构成。然后,第一层的每个神经元连接到隐藏层的所有神经元,负责网络的学习能力。隐藏层后面可以跟几个其他隐藏层,这是深度学习网络的典型特征。最后,将最后一个隐藏层的输出提供给给出结果(即目标变量的值)的输出层。

在最简单的形式中,神经网络只有一个隐藏层,如下图所示。

输入层的神经元数目等于特征数目。根据目标变量定义输出层的神经元数。接下来的问题是如何为隐藏层找到正确的神经元数量。

数量太少可能会产生欠拟合,因为网络可能无法正确学习。但是数量太多有可能产生过拟合,因为从网络中学习了太多从而无法泛化。因此必须有合适数量的神经元来确保良好的训练。

如何优化神经元的数量

该过程非常简单,它使用交叉验证:

  • 设置一定数量的神经元

  • 在 k 折交叉验证中计算某些性能指标的平均值

  • 用不同数量的神经元重复这个过程

  • 选择神经元的数量,最大化 k 交叉验证的平均值

交叉验证很重要,因为使用它我们可以确保模型不会过拟合或欠拟合。

这个过程非常类似于超参数调优,因为隐藏层中的神经元数量实际上是一个要调优的超参数。

现在让我们看看如何在 Python 中实现这个过程。

在 Python 中的示例

在这个例子中,我将展示如何使用 scikit-learn 库优化 Python 中的神经元数量。事实上,你也可能会使用 Keras 来构建神经网络,但概念是完全相同的。

我将使用 scikit-learn 中包含的乳腺癌示例数据集。

首先,让我们导入一些有用的库。

import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.neural_network import MLPClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.pipeline import Pipeline
from sklearn.metrics import roc_auc_score

然后,我们可以加载我们的数据集,并将其分成训练集和测试集。

X,y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

现在,我们必须定义我们的模型。在本例中,我将使用一个简单的带有单个隐藏层的多层感知器。为了简单起见,构造函数的所有参数都保留在它们的标准值中。我只是设置随机状态,以确保结果的可重复性。

在将数据集提供给神经网络之前,不要忘记缩放特征。为简单起见,我将在 scikit-learn 中使用 Pipeline 对象,然后应用标准化。

model = Pipeline([('scaler',StandardScaler()),('model',MLPClassifier(random_state=0))
])

现在,我们必须通过搜索最佳神经元数量来优化我们的网络。请记住,我们尝试了几种可能的数字并计算交叉验证中性能指标的平均值。最大化这样一个值的神经元数量就是我们正在寻找的数量。

为此,我们可以使用 GridSearchCV 对象。由于我们正在处理二元分类问题,因此我们要最大化的指标是 AUROC。我们将以 2 的步长跨越 5 到 100 个神经元。

search = GridSearchCV(model,{'model__hidden_layer_sizes':[(x,) for x in np.arange(5,100,2)]},cv = 5, scoring = "roc_auc", verbose=3, n_jobs = -1)

最后,我们可以寻找最佳的神经元数量。

search.fit(X_train, y_train)

搜索结束后,我们会得到最好的平均分,即:

search.best_score_
# 0.9947175348495965

神经元的最佳数量是:

search.best_params_
# {'model__hidden_layer_sizes': (75,)}

最后,我们可以在测试数据集上计算这样一个模型的 AUROC,以确保我们没有对数据集进行过多的处理。

roc_auc_score(y_test,search.predict_proba(X_test)[:,1])
# 0.9982730973233008

我们得到的值仍然很高,所以我们很确定优化后的模型已经泛化了训练数据集,从它携带的信息中学习。

总结

优化神经网络可能是一个复杂的任务。在这篇文章中,我已经解释了一种优化神经元数量的可能方法,但是同样的概念甚至可以应用到其他超参数(比如激活函数、小批量大小、时代数量、学习速度)。记住,超参数的数量越多,优化的速度就越慢。

·  END  ·

HAPPY LIFE

一个神经网络有多少个神经元?相关推荐

  1. 深度解析神经网络中每个神经元的使命 | MIT朱俊彦港中文周博磊力作

    作者 | 李科雨 编辑 | 陈大鑫 我们都知道,深度神经网络擅长查找可解决大型数据集上复杂任务的分层表示. 而对我们人类来讲,应该如何理解这些学习得到的表示呢? 今天介绍的这项工作中,MIT朱俊彦团队 ...

  2. 人工神经网络神经元模型,人工神经元算法机制图

    神经网络算法原理 4.2.1概述人工神经网络的研究与计算机的研究几乎是同步发展的. 1943年心理学家McCulloch和数学家Pitts合作提出了形式神经元的数学模型,20世纪50年代末,Rosen ...

  3. 人体中数量最多的神经元,人体内有多少个神经元

    人体的神经细胞到底有多少个? 谷歌人工智能写作项目:神经网络伪原创 人体内平均有多少神经元? 写作猫. 约含有140亿个神经元胞体虽然神经元形态与功能多种多样,但结构上大致都可分成胞体(cellbod ...

  4. 神经网络基础01-从神经元到深度学习

    神经网络浅讲:从神经元到深度学习 参考文章:https://www.cnblogs.com/subconscious/p/5058741.html 前言 神经网络是一种模拟人脑的神经网络以期能够实现类 ...

  5. 用Python从头实现一个神经网络

    用Python从头实现神经网络 实在是觉得LaTeX编译出来的公式太好看了,所以翻译了一下,原文地址: Machine Learning for Beginners: An Introduction ...

  6. 独家 | 教你用卷积神经网络对视觉神经元进行建模(附资源)

    作者:Ioannis Kalfas 翻译:笪洁琼 校对:丁楠雅 本文共3400字,建议阅读13分钟. 本文将通过卷积神经网络层的人工神经元来模拟大脑视觉区域的神经元,在HMAX模型下最终输出向量结果的 ...

  7. 前沿|Google AI提新型神经网络,对神经元进行高精度自动重建

    来源:AI科技大本营 7 月 16 日, Google AI 发布了一篇博客称,Google Research 部门和 Max Planck 研究所合作提出了一种新型的递归神经网络,它可以提升连接组数 ...

  8. python神经网络训练数据_用Python从头开始实现一个神经网络

    注:本篇文章非原创,翻译自Implementing a Neural Network from Scratch in Python – An Introduction​www.wildml.com ...

  9. 【深度学习】如何从结构出发更好的改进一个神经网络(二)

    [深度学习]如何从结构出发更好的改进一个神经网络(二) 文章目录 1 空洞卷积(dilated convolution) 2 PReLU 3 LeakyReLU可以解决神经元"死亡" ...

最新文章

  1. 阿里自动驾驶新突破!达摩院自研ISP图像处理器大幅提升安全性
  2. github上的linux项目,克隆GitHub上项目的非Master分支
  3. 第四章使用jQuery操作DOM元素
  4. 7-二进制,十进制,十六进制
  5. 安卓应用安全指南 4.8 输出到 LogCat
  6. 经营公司最核心的是经营员工的人生
  7. php complex,PHP復雜的基於角色的訪問控制列表
  8. GPIO驱动实例:操作LED开关
  9. 机器学习:使用matlab实现逻辑回归解决数字识别(多元分类)问题
  10. STM8S103之tim4普通定时器
  11. 什么是4G工业智能网关?与DTU有什么区别
  12. 微软自带dns服务器,win10微软设置哪个DNS服务器地址最快
  13. 2022-2027年中国稻壳提纯硅产品市场竞争态势及行业投资前景预测报告
  14. [我读]十四堂人生创意课
  15. 桌面没计算机图标不见了怎么办,桌面图标不见了怎么办,详细教您电脑桌面图标不见了怎么办...
  16. 蓝桥杯大赛——练习系统登录
  17. java中立方根方法,Java Math.cbrt() 方法
  18. halcon案例分享
  19. 02尚硅谷书城案例-用户的注册
  20. wkhtmltopdf 照片不显示的问题

热门文章

  1. 一些小技巧,想起来了就码上!
  2. SparkSQL InternalRow
  3. 回文联对联大全_回文的经典对联内容大全
  4. [python]抓取啄木鸟社区《活学活用wxPython》内容与图片
  5. 关于搞国外网赚的一些思路
  6. 强化学习--马尔可夫决策过程学习笔记
  7. python ocr 文字识别_python:使用 cnocr 进行文字识别
  8. 【历史上的今天】9 月 19 日:世界上第一个表情符号;微软发布 Virtual PC;苹果 UI 扁平化的开始
  9. #002 WebStrom Live Templete 使用说明
  10. excel熵值法计算权重_SPSS主成分分析 | 指标权重值计算真的不难!(上)