1.3.淺層神經網絡

目錄

1.3.淺層神經網絡

1.3.1 淺層神經網絡表示?

1.3.2 單個樣本的向量化表示

1.3.4 激活函數的選擇

1.3.5 修改激活函數

1.3.5 練習???????


1.3.淺層神經網絡

1.3.1 淺層神經網絡表示?

之前已經說過神經網絡的結構了,在這不重復敘述。假設我們有如下結構的網絡

對于這個網絡我們建立一個簡單的圖示?我們對第一個隱藏層記為[1],輸出層為[2]。如下圖

計算圖如下

  • 每個神經元的計算分解步驟如下
  • 第一層中的第一個神經元

  • 第一層中的第二個神經元

得出第一層的計算:

1.3.2 單個樣本的向量化表示

那么現在把上面的第一層的計算過程過程用更簡單的形式表現出來就是這樣的計算

那么對于剛才我們所舉的例子,將所有層通過向量把整個前向過程表示出來,并且確定每一個組成部分的形狀

前向過程計算:?

那么如果有多個樣本,需要這樣去做

  • 多個樣本的向量化表示

假設一樣含有M個樣本,那么上述過程變成

1.3.4 激活函數的選擇

涉及到網絡的優化時候,會有不同的激活函數選擇有一個問題是神經網絡的隱藏層和輸出單元用什么激活函數。之前我們都是選用 sigmoid 函數,但有時其他函數的效果會好得多,大多數通過實踐得來,沒有很好的解釋性。

可供選用的激活函數有:

  • 1.tanh 函數(the hyperbolic tangent function,雙曲正切函數):

效果比 sigmoid 函數好,因為函數輸出介于 -1 和 1 之間。

注 :tanh 函數存在和 sigmoid 函數一樣的缺點:當 z 趨緊無窮大(或無窮小),導數的梯度(即函數的斜率)就趨緊于 0,這使得梯度算法的速度會減慢。

  • 2.ReLU 函數(the rectified linear unit,修正線性單元)

當 z > 0 時,梯度始終為 1,從而提高神經網絡基于梯度算法的運算速度,收斂速度遠大于 sigmoid 和 tanh。然而當 z < 0 時,梯度一直為 0,但是實際的運用中,該缺陷的影響不是很大。

  • Leaky ReLU(帶泄漏的 ReLU):

Leaky ReLU 保證在 z < 0 的時候,梯度仍然不為 0。理論上來說,Leaky ReLU 有 ReLU 的所有優點,但在實際操作中沒有證明總是好于 ReLU,因此不常用。

1.3.4.1 為什么需要非線性的激活函數

使用線性激活函數和不使用激活函數、直接使用 Logistic 回歸沒有區別,那么無論神經網絡有多少層,輸出都是輸入的線性組合,與沒有隱藏層效果相當,就成了最原始的感知器了。

1.3.5 修改激活函數

將上述網絡的隱層激活函數修改為tanh,最后一層同樣還是二分類,所以激活函數選擇依然是sigmoid函數

  • 前向傳播

  • 反向傳播梯度下降

那么通過這個計算圖來理解這個過程,單個樣本的導數推導過程:

1.3.5 練習


import numpy as np
import matplotlib.pyplot as plt
import sklearn
import sklearn.datasets
import sklearn.linear_model
from load_dataset import load_planar_datasetX, Y = load_planar_dataset()print ('數據集特征值的形狀:', X.shape)
print ('數據集目標值的:', Y.shape)
print ('樣本數:', X.shape[1])def sigmoid(x):""""""s = 1/(1+np.exp(-x))return s* 步驟* 定義網絡結構* 初始化參數* 循環一下步驟* 前向傳播* 計算損失* 反向傳播獲得梯度* 梯度更新
#%% md
### 1、定義神經網絡結構
網絡輸入輸出以及隱藏層神經元個數
#%%
def layer_sizes(X, Y):""""""# 輸入層大小2n_x = X.shape[0]# 隱層大小n_h = 4# 輸出層大小n_y = Y.shape[0]### END CODE HERE ###return (n_x, n_h, n_y)
#%% md
### 2、 初始化模型參數
隨機初始化權重以及偏置為0
#%%
def initialize_parameters(n_x, n_h, n_y):"""輸入每層的神經元數量返回:隱層、輸出層的參數"""np.random.seed(2)### 開始# 創建隱層的兩個參數# 讓值小一些W1 = np.random.randn(n_h, n_x) * 0.01b1 = np.zeros((n_h, 1))# 創建輸出層前對應的參數W2 = np.random.randn(n_y, n_h) * 0.01b2 = np.zeros((n_y, 1))### 結束# 檢測維度是否符合要求assert (W1.shape == (n_h, n_x))assert (b1.shape == (n_h, 1))assert (W2.shape == (n_y, n_h))assert (b2.shape == (n_y, 1))parameters = {"W1": W1,"b1": b1,"W2": W2,"b2": b2}return parameters
#%% md
### 3、循環中的第一步:前向傳播
根據之前給的前向傳播公式,完成該函數使用的函數:np.dot,np.tanh, np.sigmoid
#%%
def forward_propagation(X, parameters):"""Argument:X:(n_feature, m)Returns:A2:最后一層的輸出cache:用于反向傳播計算的存儲中間計算結果的字典"""# 獲取參數### 開始# 取出每一層的參數W1 = parameters['W1']b1 = parameters['b1']W2 = parameters['W2']b2 = parameters['b2']# 進行一層一層的運算Z1 = np.matmul(W1, X) + b1A1 = np.tanh(Z1)# 第二層Z2 = np.dot(W2, A1) + b2A2 = sigmoid(Z2)### 結束assert(A2.shape == (1, X.shape[1]))cache = {"Z1": Z1,"A1": A1,"Z2": Z2,"A2": A2}return A2, cache
#%% md
### 3、循環中的二步:計算損失
完成損失計算的過程,根據損失公式設計多個維度,使用np.multiply進行乘法運算
#%%
def compute_cost(A2, Y, parameters):"""parameters:最后一層輸出,目標值,參數return:損失"""m = Y.shape[1]### 開始logpro = np.multiply(np.log(A2), Y) + np.multiply((1 - Y), (np.log(1 - A2)))cost = - 1 / m * np.sum(logpro)### 結束cost = np.squeeze(cost)assert(isinstance(cost, float))return cost
#%% md
### 3、循環中的第三步:反向傳播
反向傳播在這個網絡中分為兩步def backward_propagation(parameters, cache, X, Y):"""parameters:cache:存儲每層前向傳播計算結果X:數據特征Y:數據目標值return:每個參數的梯度"""# 得出訓練樣本數量m = X.shape[1]# 獲取參數和緩存中的輸出### 開始W1 = parameters['W1']W2 = parameters['W2']A1 = cache['A1']A2 = cache['A2']### 結束# 反向傳播計算梯度### 開始# 最后一層的參數梯度計算dZ2 = A2 - YdW2 = 1/m * np.dot(dZ2, A1.T)db2 = 1/m * np.sum(dZ2, axis=1, keepdims=True)# 隱藏層的參數梯度計算dZ1 = np.dot(W2.T, dZ2) * (1 - np.power(A1, 2))dW1 = 1/m * np.dot(dZ1, X.T)db1 = 1/m * np.sum(dZ1, axis=1, keepdims=True)### 結束grads = {"dW1": dW1,"db1": db1,"dW2": dW2,"db2": db2}return grads
#%% md
### 3、循環中的第四步:更新梯度
#%%
def update_parameters(parameters, grads, learning_rate = 0.005):"""參數:網絡參數,梯度,學習率返回更新之后的參數"""# 獲取參數以及梯度### 開始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 - learning_rate * dW1b1 = b1 - learning_rate * db1W2 = W2 - learning_rate * dW2b2 = b2 - learning_rate * db2### 結束parameters = {"W1": W1,"b1": b1,"W2": W2,"b2": b2}return parameters
#%% md
### 4、建立網絡模型訓練邏輯
#%%
def nn_model(X, Y, num_iterations = 10000, print_cost=False):""""""np.random.seed(3)n_x = layer_sizes(X, Y)[0]n_y = layer_sizes(X, Y)[2]# 初始化參數### 開始# 獲取網絡的層大小# 2, 4, 1n_x, n_h, n_y = layer_sizes(X, Y)parameters = initialize_parameters(n_x, n_h, n_y)W1 = parameters['W1']b1 = parameters['b1']W2 = parameters['W2']b2 = parameters['b2']### 結束# 循環for i in range(0, num_iterations):### 開始# 前向傳播A2, cache = forward_propagation(X, parameters)# 計算損失cost = compute_cost(A2, Y, parameters)# 反向傳播計算梯度grads = backward_propagation(parameters, cache, X, Y)# 利用梯度更新參數parameters = update_parameters(parameters, grads)### 結束if i % 1000 == 0:print ("迭代次數 %i: %f" %(i, cost))return parameters
#%% md
### 5、預測結果
#%%
def predict(parameters, X):""""""# 計算概率值,以及判斷類別A2, cache = forward_propagation(X, parameters)predictions = np.array( [1 if x >0.5 else 0 for x in A2.reshape(-1,1)] ).reshape(A2.shape)return predictions
#%%
# 測試
parameters = nn_model(X, Y, num_iterations = 10000)predictions = predict(parameters, X)

?

?

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

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

相關文章

StarRocks強大的實時數據分析

代碼倉庫&#xff1a;https://github.com/StarRocks/starrocks?tabreadme-ov-file StarRocks | A High-Performance Analytical Database 快速開始&#xff1a;StarRocks | StarRocks StarRocks 是一款高性能分析型數據倉庫&#xff0c;使用向量化、MPP 架構、CBO、智能物化…

2024年博客之星主題創作|貓頭虎分享AI技術洞察:2025年AI發展趨勢前瞻與展望

2025年AI發展趨勢前瞻&#xff1a;貓頭虎深度解析未來科技與商業機遇 摘要 2024年&#xff0c;AI技術迎來爆發式增長&#xff0c;AIGC、智能體、AIRPA、AI搜索、推理模型等技術不斷突破&#xff0c;AI應用場景持續擴展。2025年&#xff0c;AI將進入全新發展階段&#xff0c;W…

PG vs MySQL mvcc機制實現的異同

MVCC實現方法比較 MySQL 寫新數據時&#xff0c;把舊數據寫入回滾段中&#xff0c;其他人讀數據時&#xff0c;從回滾段中把舊的數據讀出來 PostgreSQL 寫新數據時&#xff0c;舊數據不刪除&#xff0c;直接插入新數據。 MVCC實現的原理 PG的MVCC實現原理 定義多版本的數據…

Android SystemUI——CarSystemBar視圖解析(十一)

前面文章我們已經把 CarSystemBar 從啟動到構建視圖,再到將視圖添加到 Window 的流程分析完畢,我們知道默認情況下在車載系統中只顯示頂部欄和底部欄視圖的。這里我們在前面文章的基礎上以頂部欄為例具體解析其視圖的結構。 一、頂部欄解析 通過《CarSystemBar車載狀態欄》這…

51c~ONNX~合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/11608027 一、使用Pytorch進行簡單的自定義圖像分類 ~ONNX 推理 圖像分類是計算機視覺中的一項基本任務&#xff0c;涉及訓練模型將圖像分類為預定義類別。本文中&#xff0c;我們將探討如何使用 PyTorch 構建一個簡單的自定…

每打開一個chrome頁面都會【自動打開F12開發者模式】,原因是 使用HBuilderX會影響谷歌瀏覽器的瀏覽模式

打開 HBuilderX&#xff0c;點擊 運行 -> 運行到瀏覽器 -> 設置web服務器 -> 添加chrome瀏覽器安裝路徑 chrome谷歌瀏覽器插件 B站視頻下載助手插件&#xff1a; 參考地址&#xff1a;Chrome插件 - B站下載助手&#xff08;輕松下載bilibili嗶哩嗶哩視頻&#xff09…

go語言之OOP特性和演示

一、OOP特性 Go語言中的OOP特性 結構體&#xff1a;在Go中&#xff0c;結構體用于定義復合類型&#xff0c;類似于其他語言中的類。它可以包含字段&#xff08;屬性&#xff09;和方法&#xff08;行為&#xff09;。方法&#xff1a;Go允許為任何自定義類型&#xff08;包括…

USB3020任意波形發生器4路16位同步模擬量輸出卡1MS/s頻率 阿爾泰科技

信息社會的發展&#xff0c;在很大程度上取決于信息與信號處理技術的先進性。數字信號處理技術的出現改變了信息 與信號處理技術的整個面貌&#xff0c;而數據采集作為數字信號處理的必不可少的前期工作在整個數字系統中起到關鍵 性、乃至決定性的作用&#xff0c;其應用已經深…

ChatGPT大模型極簡應用開發-目錄

引言 要理解 ChatGPT&#xff0c;了解其背后的 Transformer 架構和 GPT 技術一路的演進則變得非常必要。 ChatGPT 背后的 LLM 技術使普通人能夠通過自然語言完成過去只能由程序員通過編程語言實現的任務&#xff0c;這是一場巨大的變革。然而&#xff0c;人類通常容易高估技術…

C++入門基礎篇:域、C++的輸入輸出、缺省參數、函數重載、引用、inline、nullptr

本篇文章是對C學習前期的一些基礎部分的學習分享&#xff0c;希望也能夠對你有所幫助。 那咱們廢話不多說&#xff0c;直接開始吧&#xff01; 目錄 1.第一個C程序 2. 域 3. namespace 3.1 namespace的作用 3.2 namespace的定義 3.3 namespace使用說明 4.C的輸入和輸出…

RabbitMQ---TTL與死信

&#xff08;一&#xff09;TTL 1.TTL概念 TTL又叫過期時間 RabbitMQ可以對隊列和消息設置TTL&#xff0c;當消息到達過期時間還沒有被消費時就會自動刪除 注&#xff1a;這里我們說的對隊列設置TTL,是對隊列上的消息設置TTL并不是對隊列本身&#xff0c;不是說隊列過期時間…

先進制造aps專題二十七 西門子opcenter aps架構分析

歐美的商業aps&#xff0c;主要就是sap apo,西門子opcenter aps,達索quintiq 從技術的層面&#xff0c;西門子aps是不如sap apo的&#xff0c;但是西門子aps是西門子數字化工廠產品的核心&#xff0c;有很多特色&#xff0c;所以分析 西門子aps主要分計劃器和排產器兩個部分 計…

WPF如何跨線程更新界面

WPF如何跨線程更新界面 在WPF中&#xff0c;類似于WinForms&#xff0c;UI控件只能在UI線程&#xff08;即主線程&#xff09;上進行更新。WPF通過Dispatcher機制提供了跨線程更新UI的方式。由于WPF的界面基于Dispatcher線程模型&#xff0c;當你在非UI線程&#xff08;例如后…

ingress-nginx代理tcp使其能外部訪問mysql

一、helm部署mysql主從復制 helm repo add bitnami https://charts.bitnami.com/bitnami helm repo updatehelm pull bitnami/mysql 解壓后編輯values.yaml文件&#xff0c;修改如下&#xff08;storageclass已設置默認類&#xff09; 117 ## param architecture MySQL archit…

macOS Sequoia 15.3 beta3(24D5055b)發布,附黑、白蘋果鏡像下載地址

“ 鏡像&#xff08;黑蘋果引導鏡像、白蘋果Mac鏡像、黑蘋果虛擬機鏡像&#xff09;下載地址&#xff1a;黑果魏叔官網。” 關于macOS Sequoia 15.3 beta3&#xff08;24D5055b&#xff09;&#xff0c;以下是對其的詳細介紹&#xff1a; 一、版本發布信息 發布時間 &#xf…

豪越科技消防一體化安全管控平臺:推動消防作訓模式智慧轉型

在當今數字化浪潮席卷全球的時代背景下&#xff0c;各行業都在積極尋求創新與變革&#xff0c;以提升工作效率、優化管理流程。消防行業作為保障社會安全的關鍵領域&#xff0c;其數字化轉型的需求尤為迫切。豪越科技的消防一體化安全管控平臺應運而生&#xff0c;為消防工作帶…

Tomcat下載配置

目錄 Win下載安裝 Mac下載安裝配置 Win 下載 直接從官網下載https://tomcat.apache.org/download-10.cgi 在圈住的位置點擊下載自己想要的版本 根據自己電腦下載64位或32位zip版本 安裝 Tomcat是綠色版,直接解壓到自己想放的位置即可 Mac 下載 官網 https://tomcat.ap…

1161 Merging Linked Lists (25)

Given two singly linked lists L1?a1?→a2?→?→an?1?→an? and L2?b1?→b2?→?→bm?1?→bm?. If n≥2m, you are supposed to reverse and merge the shorter one into the longer one to obtain a list like a1?→a2?→bm?→a3?→a4?→bm?1??. For ex…

【記錄】騰訊混元大模型本地部署過程

概述 本文記錄在本地部署騰訊混元大模型的過程。僅為部署記錄,不涉及過多的技術要點。 混元大模型主頁:https://github.com/Tencent/HunyuanVideo 該模型應該是當前開源的效果不錯的模型,其實官方文檔將部署過程寫的相當詳細了,但是這里為了便于后期的學習,特意將部署過程…

Go-知識 版本演進

Go-知識 版本演進 Go release notesr56(2011/03/16)r57(2011/05/03)Gofix 工具語言包工具小修訂 r58(2011/06/29)語言包工具小修訂 r59(2011/08/01)語言包工具 r60(2011/09/07)語言包工具 [go1 2012-03-28](https://golang.google.cn/doc/devel/release#go1)[go1.1 2013-05-13]…