神經網絡|(二)sigmoid神經元函數

【1】引言

在前序學習進程中,我們已經了解了基本的二元分類器和神經元的構成,文章學習鏈接為:

神經網絡|(一)加權平均法,感知機和神經元-CSDN博客

在此基礎上,我們認識到神經元本身在做二元分類,是一種非此即彼的選擇。

由于不同的數據所占的權重不同,二元分類結果也一定收到權重的影響,為此,必須使用數學表達這種影響力。

在神經網絡相關研究的漫長發展進程中,研究范圍從單個因素到多個因素,必須關注無數的二元分類結果同時作用后獲得的最終分類結果,于是sigmoid()函數被提出。

【2】二元分類結果數學表達

認識感知機的二元分類本質,是研究sigmoid()函數的基礎。

這里先創造四個矩陣,這三個矩陣分別代表元素1,元素2,元素1和權重和元素2的權重。

import numpy as np #引入numpy模塊
import matplotlib.pyplot as plt #引入matplotlib模塊#創造矩陣
a = np.random.randint(5,9,size=(1,5)) #矩陣
b = np.random.randint(1,5,size=(1,5)) #矩陣
c = np.random.randn(1,5) #矩陣
d = np.random.randn(1,5) #矩陣
#閾值開關
k=1
#空矩陣
e =np.zeros((1,5),np.uint8) #用來存儲二元分類的計算結果

進行二元分類計算:

#二元分類計算
for i in range (5):if a[0,i]*c[0,i]+b[0,i]*d[0,i]-k>0: #閾值計算,滿足條件時取1,否則取0e[0,i]=1else:e[0,i]=0print('e[0,',i,']=',e[0,i]) #輸出閾值計算結果

繪制二元分類的效果:

#繪制二元分類計算的結果
print('a=',a) #輸出矩陣
print('b=',b) #輸出矩陣
print('c=',c) #輸出矩陣
print('d=',d) #輸出矩陣
x=np.arange(0,5,1) #定義一個自變量
plt.plot(x,e[0,x]) #對閾值計算結果繪圖
plt.savefig('ganzhiji.png') #保存圖像
plt.show() #輸出圖像

這里使用的閾值判斷函數為:

for i in range (5):if a[0,i]*c[0,i]+b[0,i]*d[0,i]-k>0: #閾值計算,滿足條件時取1,否則取0e[0,i]=1else:e[0,i]=0

代碼運行后的輸出圖像為:

圖1

圖1真實地反映了非此即彼的二元分類效果。

需要注意的是,由于元素的權重使用隨機數生成,所以每次運行上述程序,獲得的效果可能不一樣。

【3】sigmoid函數

實際上,二元分類效果可能不是兩個元素算一次就進行判斷,而是多個結果互相疊加在一起,也就是把閾值判斷函數改為:

f=0 #用來存儲二元分類的綜合計算結果
#二元分類計算
for i in range (5):if i==0:e[0, i] = a[0, i] * c[0, i] + b[0, i] * d[0, i] - k  # 閾值計算else:e[0, i] = a[0, i] * c[0, i] + b[0, i] * d[0, i] - k+e[0,i-1]  # 閾值計算
if e[0,4]>0: #最后計算結果,超過閾值開關取1,否則取0f=1
else:f=0

代碼運行后,獲得的輸出圖像為:

圖2

此時獲得的數據分別為:

圖3

由圖3可見,因為最后的e[0,4]>0,所以f=1。

此時的完整代碼為:

import numpy as np #引入numpy模塊
import matplotlib.pyplot as plt #引入matplotlib模塊#創造矩陣
a = np.random.randint(5,9,size=(1,5)) #矩陣
b = np.random.randint(1,5,size=(1,5)) #矩陣
c = np.random.randn(1,5) #矩陣
d = np.random.randn(1,5) #矩陣
#閾值開關
k=1
#空矩陣
e =np.zeros((1,5),np.uint8) #用來存儲二元分類的計算結果
f=0 #用來存儲二元分類的綜合計算結果
#二元分類計算
for i in range (5):if i==0:e[0, i] = a[0, i] * c[0, i] + b[0, i] * d[0, i] - k  # 閾值計算else:e[0, i] = a[0, i] * c[0, i] + b[0, i] * d[0, i] - k+e[0,i-1]  # 閾值計算
if e[0,4]>0: #最后計算結果,超過閾值開關取1,否則取0f=1
else:f=0#繪制二元分類計算的結果
print('a=',a) #輸出矩陣
print('b=',b) #輸出矩陣
print('c=',c) #輸出矩陣
print('d=',d) #輸出矩陣
print('e=',e) #輸出矩陣
print('f=',f) #輸出矩陣
x=np.arange(0,5,1) #定義一個自變量
plt.plot(x,e[0,x]) #對閾值計算結果繪圖
plt.savefig('ganzhiji.png') #保存圖像
plt.show() #輸出圖像

sigmoid()函數就是在上述基礎上,進一步優化函數表達式,把所有的加權計算結果變成指數函數的變量,并且指數函數還設置成分式的一部分。相應的,有如下函數:

f(x)=\frac{1}{1+exp(-\sum {w}_j{x}_j-b)}

如果把-w_{j}x_{j}-b簡化為-x,該函數相應簡化為:

f(x)=\frac{1}{1+exp(-x)}

函數對應的圖像為:

圖4

圖4是平滑過渡圖像,并且輸出結果限定在(0,1)范圍內。

繪制圖4的代碼為:

import numpy as np #引入numpy模塊
import matplotlib.pyplot as plt #引入matplotlib模塊#創造矩陣
t=np.linspace(-10,10,100) #自變量
y0=np.exp(-t) #指數函數
y=1/(1+y0) #因變量
plt.plot(t,y) #繪制圖像
plt.title('sigmoid() function') #圖像上設置圖名
plt.savefig('sigmoid() function.png') #保存圖像
plt.show() #顯示圖像

【4】函數驗證

為驗證sigmoid()函數,可以在上述示例中的代碼plt.plot(x,e[0,x]) #對閾值計算結果繪圖

修改為:

plt.plot(x,1/(1+np.exp(-e[0,x]))) #對閾值計算結果繪圖

此時運行代碼獲得的圖像為:

圖5

由圖5可見,復雜多變的實際情況中,sigmoid()函數的輸出結果也是在(0,1)范圍內。所以,sigmoid()函數本身具有很強的實用性。

此時的完整代碼為:

import numpy as np #引入numpy模塊
import matplotlib.pyplot as plt #引入matplotlib模塊#創造矩陣
a = np.random.randint(5,9,size=(1,5)) #矩陣
b = np.random.randint(1,5,size=(1,5)) #矩陣
c = np.random.randn(1,5) #矩陣
d = np.random.randn(1,5) #矩陣
#閾值開關
k=1
#空矩陣
e =np.zeros((1,5),np.uint8) #用來存儲二元分類的計算結果
f=0 #用來存儲二元分類的綜合計算結果
#二元分類計算
for i in range (5):if i==0:e[0, i] = a[0, i] * c[0, i] + b[0, i] * d[0, i] - k  # 閾值計算else:e[0, i] = a[0, i] * c[0, i] + b[0, i] * d[0, i] - k+e[0,i-1]  # 閾值計算
if e[0,4]>0: #最后計算結果,超過閾值開關取1,否則取0f=1
else:f=0#繪制二元分類計算的結果
print('a=',a) #輸出矩陣
print('b=',b) #輸出矩陣
print('c=',c) #輸出矩陣
print('d=',d) #輸出矩陣
print('e=',e) #輸出矩陣
print('f=',f) #輸出矩陣
x=np.arange(0,5,1) #定義一個自變量
plt.plot(x,1/(1+np.exp(-e[0,x]))) #對閾值計算結果繪圖
plt.savefig('sigmoid.png') #保存圖像
plt.show() #輸出圖像

需要注意的是,由于元素的權重使用隨機數生成,所以每次運行上述程序,獲得的效果可能不一樣。

【5】總結

探究了sigmoid()函數,研究了多因素的綜合作用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67127.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67127.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67127.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Qt中QVariant的使用

1.使用QVariant實現不同類型數據的相加 方法:通過type函數返回數值的類型,然后通過setValue來構造一個QVariant類型的返回值。 函數: QVariant mainPage::dataPlus(QVariant a, QVariant b) {QVariant ret;if ((a.type() QVariant::Int) &a…

BAHD酰基轉移酶對紫草素的手性催化-文獻精讀105

Two BAHD Acyltransferases Catalyze the Last Step in the Shikonin/Alkannin Biosynthetic Pathway 兩個BAHD酰基轉移酶催化了紫草素/左旋紫草素生物合成途徑中的最后一步 一個BAHD酰基轉移酶專門催化紫草素的酰基化,而另一個BAHD酰基轉移酶則僅催化紫草素的對映…

Avalonia+ReactiveUI跨平臺路由:打造絲滑UI交互的奇幻冒險

一、引言 在當今數字化時代,跨平臺應用開發已成為大勢所趨。開發者們迫切需要一種高效、靈活的方式,能夠讓應用程序在不同操作系統上無縫運行,為用戶提供一致的體驗。Avalonia 和 ReactiveUI 的組合,宛如一對天作之合的舞者&…

CLion開發Qt桌面

IDE:CLion Qt Qt版本:5.12 學習正點原子的嵌入式Linux開發板時,使用Qt Creator寫代碼不是很方便,遂嘗試使用CLion搭建Qt開發環境。 一、CLion的Qt環境搭建 1,配置工具鏈 找到Qt的安裝目錄,此處為E:\Tools\…

【學術會議-第五屆機械設計與仿真國際學術會議(MDS 2025) 】前端開發:技術與藝術的完美融合

重要信息 大會官網:www.icmds.net 大會時間:2025年02月28日-03月02日 大會地點:中國-大連 會議簡介 2025年第五屆機械設計與仿真國際學術會議(MDS 2025) 將于2025年02月28-3月02日在中國大連召開。MDS 2025將圍繞“機械設計”…

《DeepSeek R1:開源大模型的破局者》

驚爆!中國開源大模型震撼登場 在人工智能領域的激烈競爭中,一場震撼全球的技術革命正悄然發生。2025 年 1 月 20 日晚,一家來自中國的人工智能初創公司 ——DeepSeek(深度求索),如同一顆耀眼的新星&#x…

84,【8】BUUCTF WEB [羊城杯 2020]Blackcat

進入靶場 音樂硬控我3分鐘 回去看源碼 <?php // 檢查 POST 請求中是否包含 Black-Cat-Sheriff 和 One-ear 字段 // 如果任意一個字段為空&#xff0c;則輸出錯誤信息并終止腳本執行 if(empty($_POST[Black-Cat-Sheriff]) || empty($_POST[One-ear])){die(請提供 Black-C…

人工智能:從基礎到前沿

目錄 目錄 1. 引言 2. 人工智能基礎 2.1 什么是人工智能&#xff1f; 2.2 人工智能的歷史 2.3 人工智能的分類 3. 機器學習 3.1 機器學習概述 3.2 監督學習 3.3 無監督學習 3.4 強化學習 4. 深度學習 4.1 深度學習概述 4.2 神經網絡基礎 4.3 卷積神經網絡&#…

漏洞情報:為什么、要什么和怎么做

漏洞一直是網絡攻防的焦點所在&#xff0c;因為漏洞直接或間接影響安全性的核心方面——權限。攻擊者挖掘和利用漏洞&#xff0c;獲取非授權的權限&#xff1b;防御方定位和消除漏洞&#xff0c;監測和阻斷漏洞的利用&#xff0c;使攻擊者無法利用漏洞達到其目的。漏洞信息本質…

leetcode——刪除鏈表的倒數第N個節點(java)

給你一個鏈表&#xff0c;刪除鏈表的倒數第 n 個結點&#xff0c;并且返回鏈表的頭結點。 示例 1&#xff1a; 輸入&#xff1a;head [1,2,3,4,5], n 2 輸出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 輸入&#xff1a;head [1], n 1 輸出&#xff1a;[] 示例 3&#xf…

正則表達式以及Qt中的使用

目錄 一、正則表達式 1、基本匹配&#xff1a; 2、元字符&#xff1a; 2.1 .運算符&#xff1a; 2.2 字符集&#xff1a; 2.3 重復次數&#xff1a; 2.4 量詞{} 2.5 特征標群() 2.6 或運算符 2.7 \反斜線轉碼特殊字符 2.8 錨點 3、簡寫字符 4、零寬度斷言 4.1 正…

【第一天】零基礎入門刷題Python-算法篇-數據結構與算法的介紹(持續更新)

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、Python數據結構與算法的詳細介紹1.基本概念2.Python中的數據結構1. 列表&#xff08;List&#xff09;2. 元組&#xff08;Tuple&#xff09;3. 字典&#…

流行的開源高性能數據同步工具 - Apache SeaTunnel 整體架構運行原理

概述 背景 數據集成在現代企業的數據治理和決策支持中扮演著至關重要的角色。隨著數據源的多樣化和數據量的迅速增長&#xff0c;企業需要具備強大的數據集成能力來高效地處理和分析數據。SeaTunnel通過其高度可擴展和靈活的架構&#xff0c;幫助企業快速實現多源數據的采集、…

消息隊列篇--原理篇--Pulsar(Namespace,BookKeeper,類似Kafka甚至更好的消息隊列)

Apache Pulusar是一個分布式、多租戶、高性能的發布/訂閱&#xff08;Pub/Sub&#xff09;消息系統&#xff0c;最初由Yahoo開發并開源。它結合了Kafka和傳統消息隊列的優點&#xff0c;提供高吞吐量、低延遲、強一致性和可擴展的消息傳遞能力&#xff0c;適用于大規模分布式系…

VS Code i18n國際化組件代碼code顯示中文配置 i18n ally

VUE項目做i18n國際化之后&#xff0c;代碼中的中文都變成了code這時的代碼就會顯得非常難讀&#xff0c;如果有一個插件能把code轉換成中文顯示就好了 vscode插件搜索“i18n ally” 在項目根文件夾下創建文件&#xff1a;.vscode/settings.json settings.json 內容如下 {"…

圖論匯總1

1.圖論理論基礎 圖的基本概念 二維坐標中&#xff0c;兩點可以連成線&#xff0c;多個點連成的線就構成了圖。 當然圖也可以就一個節點&#xff0c;甚至沒有節點&#xff08;空圖&#xff09; 圖的種類 整體上一般分為 有向圖 和 無向圖。 有向圖是指 圖中邊是有方向的&a…

為什么機器學習中梯度下降是減去斜率,而不是按照其數學意義減去斜率的倒數

做個簡單假設&#xff0c;Loss函數的某一個參數的函數曲線是二次方程&#xff0c;其導數函數為 r 2 ? w r 2*w r2?w 按照斜率意義來看&#xff0c;要減去斜率倒數 降低LOSS需要將w1更新為w2&#xff0c;所以更新公式為 w w ? Δ L Δ w w w - \frac{\Delta L}{\Delta w…

iptables和ipvs差異

iptables和ipvs都是Linux內核中用于網絡流量管理的工具&#xff0c;它們在實現方式、功能、性能以及使用場景上存在一些顯著的差異。以下是對兩者的詳細比較&#xff1a; 一、實現方式 iptables&#xff1a; 基于Netfilter框架。使用鏈表&#xff08;chain&#xff09;和規則&…

Effective C++ 規則51:編寫 new 和 delete 時需固守常規

1、背景 在 C 中&#xff0c;如果你需要為類自定義 new 和 delete&#xff0c;必須遵循一些約定和規則&#xff0c;以確保內存管理的一致性、可維護性和安全性。當我們使用 new 和 delete 操作時&#xff0c;C 編譯器會&#xff1a; 調用全局或類特定的 operator new 來分配內…

JS面相對象小案例:自定義安全數組

在JS中&#xff0c;數組不像其他語言&#xff08;java、python&#xff09;中那樣安全&#xff0c;它具有動態性和弱類型性&#xff0c;切越界訪問沒有具體的報錯&#xff0c;而是返回空&#xff0c;為提升數組的安全性&#xff0c;我們可以自行定義一個安全數組。 一、增加報…