簡單神經網絡(ANN)實現:從零開始構建第一個模型

本文將手把手帶你用 Python + Numpy 實現一個最基礎的人工神經網絡(Artificial Neural Network, ANN)。不依賴任何深度學習框架,適合入門理解神經網絡的本質。


一、項目目標

構建一個三層神經網絡(輸入層、隱藏層、輸出層),用于解決一個簡單的二分類任務,例如根據兩個輸入特征判斷輸出是 0 還是 1。


二、基本結構說明

我們將構建如下結構的神經網絡:

 

復制編輯

輸入層(2個神經元) → 隱藏層(4個神經元) → 輸出層(1個神經元)

  • 激活函數:使用 Sigmoid

  • 損失函數:均方誤差

  • 學習方式:批量梯度下降 + 手動反向傳播


三、準備數據

我們使用一個簡單的數據集(可類比于 AND/OR 操作):

import numpy as np# 輸入數據:4組樣本,每組2個特征
X = np.array([[0, 0],[0, 1],[1, 0],[1, 1]
])# 標簽:這里我們嘗試模擬邏輯或(OR)操作
y = np.array([[0], [1], [1], [1]])

四、初始化網絡參數

np.random.seed(0)# 網絡結構:2 → 4 → 1
input_size = 2
hidden_size = 4
output_size = 1# 權重初始化(正態分布)
W1 = np.random.randn(input_size, hidden_size)
b1 = np.zeros((1, hidden_size))W2 = np.random.randn(hidden_size, output_size)
b2 = np.zeros((1, output_size))

五、激活函數

def sigmoid(x):return 1 / (1 + np.exp(-x))def sigmoid_derivative(x):# 輸入為 sigmoid 的輸出值return x * (1 - x)

六、訓練循環

我們進行 10000 次迭代,手動實現前向傳播、損失計算和反向傳播。

learning_rate = 0.1
for epoch in range(10000):# --- 正向傳播 ---z1 = np.dot(X, W1) + b1a1 = sigmoid(z1)z2 = np.dot(a1, W2) + b2a2 = sigmoid(z2)  # 預測值# --- 損失計算(均方誤差)---loss = np.mean((y - a2) ** 2)# --- 反向傳播 ---error_output = y - a2d_output = error_output * sigmoid_derivative(a2)error_hidden = d_output.dot(W2.T)d_hidden = error_hidden * sigmoid_derivative(a1)# --- 參數更新 ---W2 += a1.T.dot(d_output) * learning_rateb2 += np.sum(d_output, axis=0, keepdims=True) * learning_rateW1 += X.T.dot(d_hidden) * learning_rateb1 += np.sum(d_hidden, axis=0, keepdims=True) * learning_rateif epoch % 1000 == 0:print(f"Epoch {epoch}, Loss: {loss:.4f}")

七、模型測試

print("預測結果:")
print(a2.round())

輸出如下,接近 OR 操作的結果 [0, 1, 1, 1]

預測結果:
[[0.][1.][1.][1.]]

八、總結與拓展

通過這篇文章,我們實現了一個從零開始的神經網絡:

  • 完整構建了網絡結構(無需框架)

  • 實現了正向傳播與反向傳播

  • 成功對二分類任務進行了擬合

拓展建議:

  • 改用 ReLU 激活函數;

  • 增加網絡層數,提升模型表達能力;

  • 用 Softmax 處理多分類問題;

  • 嘗試用真實數據集,如鳶尾花(Iris)或 MNIST。


這類“純手寫”的 ANN 實戰項目非常適合用來理解深度學習的本質機制。如果你打算繼續深入,可以嘗試逐步遷移到 PyTorch 或 TensorFlow 框架實現更復雜的模型。

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

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

相關文章

使用python進行人員軌跡跟蹤

一、系統概述 該系統基于計算機視覺技術,實現對視頻或攝像頭畫面中的人員進行檢測、跟蹤,并生成軌跡數據。支持透視變換校準(鳥瞰圖顯示)、多目標跟蹤、軌跡存儲及視頻錄制功能,適用于安防監控、行為分析等場景。 二…

[強化學習的數學原理—趙世鈺老師]學習筆記02-貝爾曼方程

本人為強化學習小白,為了在后續科研的過程中能夠較好的結合強化學習來做相關研究,特意買了西湖大學趙世鈺老師撰寫的《強化學習數學原理》中文版這本書,并結合趙老師的講解視頻來學習和更深刻的理解強化學習相關概念,知識和算法技…

Docker入門指南:鏡像、容器與倉庫的核心概念解析

目錄 前言:為什么需要Docker? 一、Docker能做什么? 二、核心概念解析 1. 鏡像(Image):應用的標準化打包 2. 容器(Container):鏡像的運行實例 3. 鏡像倉庫&#xff0…

大模型微調實戰:基于GpuGeek平臺的低成本高效訓練方案

文章目錄 引言一、GpuGeek平臺使用入門1. 注冊與賬號設置2. 控制臺功能概覽3. 快速創建GPU實例3. 預置鏡像與自定義環境 二、GpuGeek平臺核心優勢解析1. 顯卡資源充足:多卡并行加速訓練2. 鏡像超多:開箱即用的開發環境3. 計費靈活:按需付費降…

Linux:計算機的層狀結構

1.馮諾依曼體系結構 我們常見的計算機,如筆記本、臺式機。我們不常見的計算機,如服務器,大部分都遵守馮諾依曼體系結構。 CPU:運算器和控制器組成。運算器主要工作是做算術運算和邏輯運算。控制器主要工作是協調設備之間信息流動的…

LangGraph(四)——加入人機交互控制

目錄 1. 引言2. 添加Human Assistance工具3. 編譯狀態圖4. 提示聊天機器人5. 恢復執行參考 1. 引言 智能體可能不可靠,甚至需要人工輸入才能完成任務。同樣,對于某些操作,你可能需要在運行前獲得人工批準,以保證一切按預期運行。 …

數據結構【AVL樹】

AVL樹 1.AVL樹1.AVL的概念2.平衡因子 2.AVl樹的實現2.1AVL樹的結構2.2AVL樹的插入2.3 旋轉2.3.1 旋轉的原則 1.AVL樹 1.AVL的概念 AVL樹可以是一個空樹。 它的左右子樹都是AVL樹,且左右子樹的高度差的絕對值不超過1。AVL樹是一顆高度平衡搜索二叉樹,通…

JavaScript【5】DOM模型

1.概述: DOM (Document Object Model):當頁面被加載時,瀏覽器會創建頁面的文檔對象模型,即dom對象;dom對象會被結構化為對象樹,如一個HTML文檔會被分為head,body等部分,而每個部分又…

STM32燒錄程序正常,但是運行異常

一、硬件配置問題 BOOT引腳設置錯誤 STM32的啟動模式由BOOT0和BOOT1引腳決定。若設置為從RAM啟動(BOOT01,BOOT10),程序在掉電后無法保存,導致復位后無法正常運行。應確保BOOT00(從Flash啟動)15。…

汽車二自由度系統模型以及電動助力轉向系統模型

汽車二自由度系統模型與電動助力轉向系統(EPS)的詳細建模方案,包含理論推導、MATLAB/Simulink實現代碼及參數說明: 一、二自由度汽車模型 1. 模型描述 包含以下兩個自由度: 橫向運動(側向加速度&#xf…

git提交庫常用詞

新功能 feat修改BUG fix文檔修改 docs格式修改 style重構 refactor性能提升 perf測試 test構建系統 build對CI配置文件修改 ci修改構建流程、或增加依賴庫、工具 chore回滾版本 revert

JavaScript 時間轉換:從 HH:mm:ss 到十進制小時及反向轉換

關鍵點 JavaScript 可以輕松實現時間格式(HH:mm:ss 或 HH:mm)與十進制小時(如 17.5)的相互轉換。兩個函數分別處理時間字符串到十進制小時,以及十進制小時到時間字符串的轉換,支持靈活的輸入和輸出格式。這…

LLM智能體新紀元:深入解析MCP與A2A協議,賦能智能自動化協作

LLM智能體(LLM agents)是能夠自主行動以實現特定目標的AI系統。在實際應用中,智能體能夠將用戶請求拆解為多個步驟,利用知識庫或API獲取數據,最終整合出答案。這讓智能體相比于傳統獨立聊天機器人擁有更強大的能力——…

[PMIC]PMIC重要知識點總結

PMIC重要知識點總結 摘要:PMIC (Power Management Integrated Circuit) 是現代電子設備中至關重要的組件,負責電源管理,包括電壓調節、電源轉換、電池管理和功耗優化等。PMIC 中的數字部分主要涉及控制邏輯、狀態機、寄存器配置、通信接口&am…

PYTHON訓練營DAY28

類 (一)題目1:定義圓(Circle)類 要求: 包含屬性:半徑 radius。包含方法: calculate_area():計算圓的面積(公式:πr)。calculate_circ…

機器學習-人與機器生數據的區分模型測試 -數據篩選

內容繼續機器學習-人與機器生數據的區分模型測試 使用隨機森林的弱學習樹來篩選相對穩定的特征數據 # 隨機森林篩選特征 X data.drop([city, target], axis1) # 去除修改前的城市名稱列和目標變量列 y data[target] X_train, X_test, y_train, y_test train_test_split(X…

Data whale LLM universe

使用LLM API開發應用 基本概念 Prompt Prompt 最初指的是自然語言處理研究人員為下游任務設計的一種任務專屬的輸入模板。 Temperature 使用Temperature參數控制LLM生成結果的隨機性和創造性,一般取值設置在0~1之間,當取值接近1的時候預測的隨機性較…

Azure 應用的托管身份與服務主體

Microsoft Entra ID -- 前稱 Azure Active Directory -- 提供強大的身份驗證和授權功能。托管身份和服務主體通過限制憑據暴露的風險來幫助確保對 Azure 資源的訪問安全。 托管身份為Azure原生應用程序自動管理身份,而服務主體則非常適合需要訪問Azure資源的外部應…

16 C 語言布爾類型與 sizeof 運算符詳解:布爾類型的三種聲明方式、執行時間、賦值規則

1 布爾類型 1.1 布爾類型概述 布爾類型用于表示邏輯上的真(true)和假(false)兩種狀態,是編程中條件判斷和邏輯運算的基礎。在 C 語言中,布爾值的表示方式隨著標準的發展而不斷完善。 1.2 布爾類型的三種聲…

【C++詳解】string各種接口如何使用保姆級攻略

文章目錄 一、string介紹二、string使用構造函數析構函數賦值運算符重載string的遍歷修改方法1、下標[]2、迭代器3、范圍for 迭代器使用詳解const迭代器反向迭代器(reverse) Capacity(容量相關)size/lengthmax_sizecapacityclear/emptyshrink_to_fit(縮容)reserve(擴…