首页
/
每日頭條
/
生活
/
神經網絡如何确定中間層的神經元
神經網絡如何确定中間層的神經元
更新时间:2025-12-14 11:57:03

引言

神經網絡是機器學習的一個迷人的領域,但是它們有時很難優化和解釋。事實上,它們有幾個超參數。要優化的最常見的超參數是隐藏層中的神經元數量。讓我們看看如何為我們的數據集找到一個神經網絡的最佳神經元數量。

什麼是神經網絡?

神經網絡是一種特定模型,它可以根據一層神經元來捕捉特征與目标之間的相關性,從而轉換數據集。一個神經網絡是由幾層神經元組成的。每個神經元獲取一些輸入,轉換它們并返回輸出。一個神經元的輸出可以成為下一層神經元的輸入等等,構建越來越複雜的架構。

第一層稱為輸入層,由返回特征值本身的神經元構成。然後,第一層的每個神經元連接到隐藏層的所有神經元,負責網絡的學習能力。隐藏層後面可以跟幾個其他隐藏層,這是深度學習網絡的典型特征。最後,将最後一個隐藏層的輸出提供給給出結果(即目标變量的值)的輸出層。

在最簡單的形式中,神經網絡隻有一個隐藏層,如下圖所示。

神經網絡如何确定中間層的神經元(一個神經網絡有多少個神經元)1

輸入層的神經元數目等于特征數目。根據目标變量定義輸出層的神經元數。接下來的問題是如何為隐藏層找到正确的神經元數量。

數量太少可能會産生欠拟合,因為網絡可能無法正确學習。但是數量太多有可能産生過拟合,因為從網絡中學習了太多從而無法泛化。因此必須有合适數量的神經元來确保良好的訓練。

如何優化神經元的數量

該過程非常簡單,它使用交叉驗證:

  • 設置一定數量的神經元
  • 在 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

我們得到的值仍然很高,所以我們很确定優化後的模型已經泛化了訓練數據集,從它攜帶的信息中學習。

總結

優化神經網絡可能是一個複雜的任務。在這篇文章中,我已經解釋了一種優化神經元數量的可能方法,但是同樣的概念甚至可以應用到其他超參數(比如激活函數、小批量大小、時代數量、學習速度)。記住,超參數的數量越多,優化的速度就越慢。

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
滴滴司機頻繁取消訂單有影響嗎
滴滴司機頻繁取消訂單有影響嗎
滴滴司機頻繁取消訂單有影響嗎?司機怎樣避免遲到導緻訂單被取消?遭到乘客投訴,接下來我們就來聊聊關于滴滴司機頻繁取消訂單有影響嗎?以下内容大家不妨參考一二希望能幫到您!滴滴司機頻繁取消訂單有影響嗎司機怎樣避免遲到導緻訂單被取消?遭到乘客投訴。...
2025-12-14
卡塔爾世界杯國足賽程表積分
卡塔爾世界杯國足賽程表積分
2月1日晚,世預賽亞洲區第8輪,中國男足在越南美亭體育場客場挑戰越南隊。最終,國足以1-3比分不敵越南隊,徹底宣告無緣小組前三,提前告别2022卡塔爾世界杯。來源:西部網,
2025-12-14
廣東汕頭拟規劃高鐵汕頭南站和機場
廣東汕頭拟規劃高鐵汕頭南站和機場
五大港口樞紐示意圖。昨日記者從汕頭市政府有關部門獲悉,由汕頭市發改局牽頭研究編制的《汕頭市臨港經濟區發展總體規劃(2017-2030年)》已通過汕頭市政府常務會議審定。規劃提出,将規劃建設高鐵汕頭南站等軌道樞紐,将其打造成綜合客運樞紐,還将...
2025-12-14
钛備份怎麼用
钛備份怎麼用
钛備份怎麼用?軟件數據備份軟件未備份時在軟件名稱下方顯示有未備份字樣,點擊你想要備份的軟件,在彈出的菜單中選擇備份,之後軟件進入備份操作如下圖,備份完成後在軟件下方會顯示出備份的信息,下面我們就來聊聊關于钛備份怎麼用?接下來我們就一起去了解...
2025-12-14
奇門遁甲入門怎麼排盤
奇門遁甲入門怎麼排盤
學習奇門,要學會排盤。有人主張不用自己排,現在手機電腦方便,直接電子排盤。但我個人覺得還是自己會排,懂得排盤才更懂盤。今天再次捋一下排盤的步驟。希望能得到簡友的指點。一,将日曆換算成農曆年月日時。二,畫出九宮格,按照奇門順序填寫一至九宮。三...
2025-12-14
Copyright 2023-2025 - www.tftnews.com All Rights Reserved