淺層神經網絡示例

輸出層采用sigmoid激活,隱藏層采用tanh激活

import h5py
import numpy as npfrom project_02.code.planar_utils import load_planar_dataset, plot_decision_boundarydef sigmoid(z):s = 1 / (1 + np.exp(-z))return sdef init_parameters(n_x, n_h, n_y):"""待訓練參數初始化:param n_x: 輸入層神經元個數(特征數):param n_h: 隱藏層神經元個數:param n_y: 輸出層神經元個數"""np.random.seed(2)W1 = np.random.randn(n_h, n_x) * 0.01b1 = np.zeros(shape=(n_h, 1))W2 = np.random.randn(n_y, n_h) * 0.01b2 = np.zeros(shape=(n_y, 1))parameters = {"W1": W1,"b1": b1,"W2": W2,"b2": b2}return parametersdef forward_propagation(X, parameters):"""前向傳播:param X: 輸入特征,維度是 (橫縱坐標, 樣本數):param parameters: 參數w、b:return:A2 -- The sigmoid output of the second activationcache -- a dictionary containing "Z1","A1","Z2" and "A2""""W1 = parameters["W1"]b1 = parameters["b1"]W2 = parameters["W2"]b2 = parameters["b2"]Z1 = np.dot(W1, X) + b1A1 = np.tanh(Z1)Z2 = np.dot(W2, A1) + b2A2 = sigmoid(Z2)cache = {"Z1": Z1,"A1": A1,"Z2": Z2,"A2": A2}return A2, cachedef compute_cost(A2, Y):"""計算成本:param A2: -- 輸出層的輸出結果:param Y: -- 標簽:param parameters: w,b"""m = Y.shape[1]logprobs = Y * np.log(A2) + (1 - Y) * np.log(1 - A2)cost = -np.sum(logprobs) / mreturn costdef backward_propagation(X, Y, parameters, cache):"""反向傳播:param parameters: w,b:param cache: Z1, A1, Z2, Z2:param X: 輸入特征:param Y: 標簽"""m = X.shape[1]W1 = parameters["W1"]b1 = parameters["b1"]W2 = parameters["W2"]b2 = parameters["b2"]Z1 = cache["Z1"]A1 = cache["A1"]Z2 = cache["Z2"]A2 = cache["A2"]dZ2 = A2 - Y  # [dz1,dz2,dz3... dz.m]dW2 = np.dot(dZ2, A1.T) / m  # [dw1,dw2,dw3...dw_n_h]db2 = np.sum(dZ2, 1, keepdims=True) / mdZ1 = np.dot(W2.T, dZ2) * (1 - A1 ** 2)  # dA1 * g'(Z1)dW1 = np.dot(dZ1, X.T) / mdb1 = np.sum(dZ1, axis=1, keepdims=True) / mgrads = {"dW1": dW1,"db1": db1,"dW2": dW2,"db2": db2}return gradsdef update_parameters(parameters, grads, learn_rate=1.2):"""梯度下降:param parameters: w,b:param grads: 梯度dw,db:param learning_rate: 學習率:return:"""W1 = parameters["W1"]b1 = parameters["b1"]W2 = parameters["W2"]b2 = parameters["b2"]dW1 = grads['dW1']db1 = grads['db1']dW2 = grads['dW2']db2 = grads['db2']W1 = W1 - learn_rate * dW1b1 = b1 - learn_rate * db1W2 = W2 - learn_rate * dW2b2 = b2 - learn_rate * db2parameters = {"W1": W1,"b1": b1,"W2": W2,"b2": b2}return parametersdef nn_model(X, Y, n_h, num_iterations=2000, print_cost=False):np.random.seed(3)n_x = X.shape[0]n_y = Y.shape[0]parameters = init_parameters(n_x, n_h, n_y)result_parameters = Nonefor i in range(0, num_iterations):A2, cache = forward_propagation(X, parameters)cost = compute_cost(A2, Y)grads = backward_propagation(X, Y, parameters, cache)result_parameters = {"W1": parameters["W1"],"b1": parameters["b1"],"W2": parameters["W2"],"b2": parameters["b2"]}parameters = update_parameters(parameters, grads, learn_rate=1.2)if print_cost and i % 1000 == 0:print(f"訓練{i}次后,成本為:{cost}")return result_parametersdef predict(parameters, X):"""預測:param parameters: w,b:param X: 特征"""A2, cache = forward_propagation(X, parameters)predictions = np.round(A2)return predictionsif __name__ == "__main__":X, Y = load_planar_dataset()parameters = nn_model(X, Y, n_h=4, num_iterations=10000, print_cost=True)predictions = predict(parameters, X)print("預測準確率是: %d" % float((np.dot(Y, predictions.T) + np.dot(1 - Y, 1 - predictions.T)) / float(Y.size) * 100) + "%")

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

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

相關文章

如何在 Objective-C 中實現多態性,并且它與其他面向對象編程語言的多態性實現有何差異?

在Objective-C中,多態性可以通過使用父類的指針來調用子類的方法來實現。具體來說,可以定義一個父類的指針,然后將子類的實例賦值給這個指針。這樣,即使使用父類的指針來調用方法,實際上會調用子類的方法。 需要注意的…

Day1每日編程題日記:數字統計、兩個數組的交集、點擊消除

前言:該篇用于記錄自看。曾回看昨天的做題代碼,竟然會覺得陌生,這竟然是我寫的,細細讀了一下,原來我當時是這么想的。因此我覺得記代碼沒有實際用處,重點是領悟了思想,這樣子代碼就在心中&#…

HashMap----源碼解讀

源碼分析&#xff1a; public class HashMap<K,V> extends AbstractMap<K,V>implements Map<K,V>, Cloneable, Serializable 在類的開頭聲明了幾個常量&#xff0c;以下是較為重要的&#xff1a; /*** 定義初始容量大小為16*/ static final int DEFAULT_I…

探索【Python面向對象】編程:新時代的高級編程范式詳解

目錄 1. 面向對象編程概念&#xff08;OOP&#xff09; 1.1 什么是類和對象&#xff1f; 1.2 類的定義 1.3 類和對象的關系 1.4 小李的理解 2. 抽象 2.1 抽象的概念 2.2 抽象類和方法 2.3 小李的理解 3. 類和實例 3.1 類的定義和實例化 3.2 類的屬性和方法 3.3 小…

如何使用Python在企業微信中發送測試結果?操作看這里!

在日常的自動化測試工作中&#xff0c;一般會需要把測試結果同步到工作群里&#xff0c;方便信息同步。那么我們今天就使用企業微信和Pythonrequests庫來演示一下具體如何操作吧&#xff01; 01 準備 開始之前&#xff0c;我們應該確保已經安裝了python環境&#xff0c;并且要…

DNS知識點

??打牌 : da pai ge的個人主頁 ???個人專欄 : da pai ge的博客專欄 ??寶劍鋒從磨礪出,梅花香自苦寒來 ? 目錄 一、DNS概念 二 hosts 文件 三 DNS優缺點 三 客戶端域名解析順序(優先級)…

8.9分王者“水刊”!1區IEEE-Trans,國人主編坐鎮!發文量2倍增長,擴刊趨勢明顯!

關注GZH【歐亞科睿學術】&#xff0c;第一時間了解最新期刊動態&#xff01; 本期&#xff0c;小編給大家推薦的是一本IEEE旗下王者“水刊”。該期刊目前處于擴刊狀態&#xff0c;接收跨學科領域&#xff0c;領域認可度高&#xff0c;還可選擇非OA模式無需版面費&#xff0c;是…

PPTP、L2TP、IPSec、IPS 有什么區別?

隨著互聯網的發展&#xff0c;保護網絡通信的安全越來越重要。PPTP、L2TP、IPSec、IPS是常見的網絡安全協議和技術&#xff0c;在保護網絡通信安全方面發揮著不同的作用和特點。下面介紹PPTP、L2TP、IPSec、IPS之間的區別。 點對點隧道協議&#xff08;PPTP&#xff09;是一種用…

對素數的一種新理解

素數是除了1和它自身沒有其它因數的自然數&#xff08;不包括1&#xff09;。素數被認為是自然數的基礎&#xff0c;就像自然界的原子一樣&#xff0c;可以通過若干個素數的乘積表示所有大于1的自然數&#xff0c;而且這種表示是唯一的&#xff08;不考慮素數的順序&#xff09…

HTTP協議分析/burp/goby/xray

一、HTTP簡介 HTTP(超文本傳輸協議)是今天所有web應用程序使用的通信協議。最初&#xff0c;HTTP只是一個為獲取基于文本的靜態資源而開發的簡單協議&#xff0c;后來人們以名種形式擴展和利用它.使其能夠支持如今常見的復雜分布式應用程序。HTTP使用一種用于消息的模型:客戶端…

Golang異常處理機制

go語言使用error來處理錯誤&#xff0c;用panic和recover來處理異常 error go語言的錯誤處理有兩個發展階段&#xff0c;以go1.13版本為分水嶺&#xff0c;在1.13版本之前&#xff0c;標準庫對error的支持非常有限&#xff0c;僅有errors.New()和fmt.Errorf()兩個函數來構造e…

javaweb中的請求與響應--基于postman工具的應用(附帶postman的詳細安裝步驟)

一、前言 后端的第一天感覺難度就上來了&#xff0c;可能是基礎太過薄弱了吧。目前看視頻已經有點跟不上了&#xff0c;果然15天想要拿下還是太勉強了點。30天還差不多。不知道讀者們有沒有好好的去學這方面的知識&#xff0c;沒有什么是學不會的&#xff0c;關鍵是堅持。 Po…

幾個小創新模型,KAN組合網絡(LSTM、GRU、Transformer)回歸預測,python預測全家桶再更新!...

截止到本期&#xff0c;一共發了9篇關于機器學習預測全家桶Python代碼的文章。參考往期文章如下&#xff1a; 1.終于來了&#xff01;python機器學習預測全家桶 2.機器學習預測全家桶-Python&#xff0c;一次性搞定多/單特征輸入&#xff0c;多/單步預測&#xff01;最強模板&a…

蘿卜快跑的狠活

蘿卜快跑作為百度旗下的自動駕駛出行服務平臺&#xff0c;在科技應用上展現了多項領先的技術。以下是蘿卜快跑采用的一些主要科技“狠活”&#xff1a; 自動駕駛技術&#xff1a; 蘿卜快跑主要使用了百度Apollo的L4級自動駕駛技術&#xff0c;該技術能夠應對海量的城市道路場景…

C++:重定義

派生類和基類的同名成員問題 派生類中再實現一個基類中的方法會怎樣 (1)代碼實驗&#xff1a;派生類和基類中各自實現一個內容不同但函數原型完全相同的方法&#xff0c;會怎么樣 (2)結論&#xff1a;基類對象調用的是基類的方法&#xff0c;派生類對象調用執行的是派生類中重…

進程調度篇

在操作系統的廣闊領域中&#xff0c;進程調度是其中一個至關重要的環節。它如同操作系統的“交通警察”&#xff0c;負責在多個等待CPU執行的進程間進行高效、公平的分配。本文將帶您了解進程調度的基本概念、重要性、常用算法…… 1. 進程調度的基本概念 1.1 進程調度的定義 …

【FreeRTOS】freeRTOS的Tmr Svc任務優先級配置

1、Tmr Svc是個FreeRTOS的軟件定時器任務&#xff0c;他可以收集各任務的狀態 2、他的優先級可以通過宏 configTIMER_TASK_PRIORITY 來配置&#xff0c;默認是2 3、修改為31后&#xff0c;程序總是啟動不了&#xff0c; 4、后面才發現原來FreeRTOS的默認最大優先級號配置的是…

工具指南 - jenkins

一、接入SonarQube 掃描代碼 SonarQube是一個用于管理代碼質量的開放平臺&#xff0c;可以快速的定位代碼中潛在的或者明顯的錯誤。 1.1 源碼管理 如果源碼托管在SVN&#xff0c;需要進行Subversion配置&#xff1a; Repository URL&#xff1a;源碼地址&#xff0c;比如https:…

一鍵優雅為Ubuntu20.04服務器掛載新磁盤

itopen組織1、提供OpenHarmony優雅實用的小工具2、手把手適配riscv qemu linux的三方庫移植3、未來計劃riscv qemu ohos的三方庫移植 小程序開發4、一切擁抱開源&#xff0c;擁抱國產化 一、小于2T磁盤掛載方式 1.1 安裝磁盤到電腦后啟動系統 1.2 查找未分區的磁盤 打…

ios swift5 藍牙廣播出數據

WARNING: The advertisement key ‘Manufacturer Data’ is not allowed WARNING: The advertisement key ‘Service Data’ is not allowed manager?.startAdvertising([CBAdvertisementDataServiceUUIDsKey : [myService?.uuid], CBAdvertisementDataLocalNameKey : "…