一个神经网络有多少个神经元?

引言

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

什么是神经网络?

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

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

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

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

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

如何优化神经元的数量

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

  • 设置一定数量的神经元

  • 在 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/73148.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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

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

人体的神经元有多少个,人体的神经元有多少支

人体内平均有多少神经元? 。 约含有140亿个神经元胞体虽然神经元形态与功能多种多样,但结构上大致都可分成胞体(cellbody,orsoma)和突起(neurite)两部分.突起又分树突(dendrite)和…

HICE第四天笔记 12月8日

第四天 12月8号 TCP和UDP 的区别 1,TCP是面向连接的协议,UDP是无连接的协议 2,TCP协议传输是可靠的,UDP协议传输“尽力而为” 3,TCP可以进行流控,UDP不行 4,TCP可以进行分段,UDP不行…

微信每日早安推送 Windows版

应诸多网友要求,这次上一个windows版的。 使用方法就是双击打开,立即就会推送一次。需要定时执行,可以使用windows的 任务计划程序 实现。帮大家百度好了 windows如何定时运行程序https://jingyan.baidu.com/article/7c6fb428334a49c1642c90e…

AutoGPT太火了,无需人类插手自主完成任务,GitHub2.7万星!

机器之心报道 编辑:杜伟、陈萍 OpenAI 的 Andrej Karpathy 都大力宣传,认为 AutoGPT 是 prompt 工程的下一个前沿。 近日,AI 界貌似出现了一种新的趋势:自主人工智能。 这不是空穴来风,最近一个名为 AutoGPT 的研究开始…

【人工智能】大模型平台新贵——文心千帆

个人主页:【😊个人主页】 🌞热爱编程,热爱生活🌞 文章目录 前言大模型平台文心千帆发布会推理能力模型微调 作用 前言 在不久的之前我们曾讨论过在ChatGPT爆火的大环境下,百度推出的“中国版ChatGPT”—文…

你如何看待百度的文心一言ERNIE Bot?心有所系,言出必行。

心有所系,言出必行。 排队中。。。 文心一言 百度全新一代知识增强大语言模型,文心大模型家族的新成员,能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感。 文心一言&#x…

post请求发送几次?

http请求这个问题在面试中可谓是三天两头的出现,好多人对这道题都是屡试不爽,倒背如流的就可以将get和post的区别如数家珍的娓娓道来! 如下图 上图来自 w3schools 我相信当面试官问这道题的时候你心里肯定是乐开花了,正中下怀的感觉&…

一个页面同时请求多个接口,超过6个请求之后,stallled时间过长

Network Timing 使用Chrome浏览器请求多个接口时发现前面的请求Network Timing中stalled时间明显较短,到第四个请求时stalled时间开始加长,超过6个请求之后,stallled时间过长,导致接口整体请求时间变长,页面渲染变慢。…

Chrome浏览器发送两次请求

Chrome浏览器在请求时会调用两次Servlet 但在FireFox上却没这个问题,发现大家说的都是插件问题。经过一一排查,发现了罪魁祸首。 在开启这个插件的时候会请求两次,将这个插件的权限改为点击时即可解决。

ChatGPT对于普通人有哪些用处

以程序员为例,让ChatGPT可以模拟面试:刷题、预测面试(从面试官角度出题、评分)、修改简历……ChatGPT简直太香了! 但很可惜的是,很多人还不知道怎么用ChatGPT。看这里!!&#xff01…

实验十七 VLAN间的三层通信

实验十七 VLAN间的三层通信 配置要求: 通过三层交换机实现VLAN间互通 通过单臂路由实现VLAN间互通 网络拓扑图: 操作步骤: 一、 通过三层交换机实现VLAN间互通 1、配置交换机LSW1的接口为trunk接口,g0/0/1口允许vlan 10通过&#…

chatgpt赋能python:Python能干什么?——一份详细的介绍

Python 能干什么?——一份详细的介绍 Python 作为一种高级编程语言,拥有着强大的功能和广泛的应用场景,不愧是当前最受欢迎的语言之一。本文将介绍 Python 可以做什么,包括但不限于: Web 开发 Python 的 web 框架能…

大家身边极度聪明的人是什么样子?

阅读本文大概需要3分钟。 前段时间分享了去年抄底特斯拉和b站的收益,加上最近股市的火热导致很多读者朋友总是私聊让我推荐股票。 更无语的是有一些朋友连怎么开户都跑过来问,说实话这种问题真心不想回复,这些朋友无非是看见其他人赚钱了&…

你可能不知道的看片方式

目录 操作教程 操作教程 进入360极速浏览器的扩展中心 下载插件进入网站找到插件并下载安装进入管理面板运行脚本随意阅片 少侠别走 如果某天不行了,就更新一下脚本 你的赞与收藏对我很重要 System.out.println("我选择滑稽取宠");

科研不知娱乐滋味了,找找美剧看看

英文名:《CSI》 中文名:《犯罪现场调查》 推荐值:★★★★★ 首播时间:2000年10月06日 《犯罪现场调查》作为目前为数不多的老牌剧集,自2000年10月在美国CBS电视网首播,便立刻受到了观众的追捧,如今每周都有过千万的观众等着观看CSI们如何通过蛛丝马迹破解一个个谜案…

最近很火的配音软件|绝不允许有人错过这样的宝藏工具

最近各大短视频平台,出现了各种各样自然且情感丰富的配音。很多朋友非常好奇,自己刷到好几个博主,用的都是这个声音,难道找的都是一个配音员吗? 当然不是!其实啊,这些自然又富有情感的声音&…

英超体育fun.乐联赛 纽卡斯尔对战伯恩茅斯 伤病太多 纽卡很难

因女王逝世英超等多场体育fun.乐联赛延后,终于上周的英超联赛在9月17日准备开赛了。晚上22:00纽卡斯尔联对战伯恩茅斯,两队积分差不多,但是战绩不一样,纽卡斯尔联平局多,所以两队的大体情况不同,把么最终结果如何,且看分析。 纽卡斯尔的“钞能力”大家众所周知,但所引援的球星不…