深度學習_全連接神經網絡

1.什么是神經網絡

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
神經網絡中信息只向一個方向移動,即從輸入節點向前移動,通過隱藏節點,再向輸出節點移
動,網絡中沒有循環或者環。其中的基本構件是:
輸入層:即輸入x的那一層
輸出層:即輸出y的那一層
隱藏層:輸入層和輸出層之間都是隱藏層
特點是:
同一層的神經元之間沒有連接。
第N層的每個神經元和第N-1層的所有神經元相連(這就是full connected的含義),第N-1層神
經元的輸出就是第N層神經元的輸入。
每個連接都有一個權值。

2.神經元是如何工作的

人工神經元接收到一個或多個輸入,對他們進行加權并相加,總和通過一個非線性函數產生輸
出。
在這里插入圖片描述
在這里插入圖片描述

3.激活函數

在神經元中引入了激活函數,它的本質是向神經網絡中引入非線性因素的,通過激活函數,神經
網絡就可以擬合各種曲線。
如果不用激活函數,每一層輸出都是上層輸入的線性函數,無論神經網絡有多少層,輸出都是輸入的線性組合,引入非線性函數作為激活函數,那輸出不再是輸入的線性組合,可以逼近任意函數。
常用的激活函數有:

3.1 Sigmoid/logistics函數

在這里插入圖片描述
sigmoid 在定義域內處處可導,且兩側導數逐漸趨近于0。如果X的值很大或者很小的時候,那么
函數的梯度(函數的斜率)會非常小,在反向傳播的過程中,導致了向低層傳遞的梯度也變得非
常小。此時,網絡參數很難得到有效訓練。這種現象被稱為梯度消失。
一般來說, sigmoid 網絡在 5 層之內就會產生梯度消失現象。而且,該激活函數并不是以0為中心的,所以在實踐中這種激活函數使用的很少。sigmoid函數一般只用于二分類的輸出層。

3.2 tanh(雙曲正切曲線)

在這里插入圖片描述
tanh也是一種非常常見的激活函數。與sigmoid相比,它是以0為中心的,使得其收斂速度要比
sigmoid快,減少迭代次數。然而,從圖中可以看出,tanh兩側的導數也為0,同樣會造成梯度消
失。
若使用時可在隱藏層使用tanh函數,在輸出層使用sigmoid函數。

3.3 ReLu

在這里插入圖片描述

在這里插入圖片描述
ReLU是目前最常用的激活函數。 從圖中可以看到,當x<0時,ReLU導數為0,而當x>0時,則不存在飽和問題。所以,ReLU 能夠在x>0時保持梯度不衰減,從而緩解梯度消失問題。
然而,隨著訓練的推進,部分輸入會落入小于0區域,導致對應權重無法更新。這種現象被稱為“神經元死亡”。

與sigmoid相比,RELU的優勢是:

  1. 采用sigmoid函數,計算量大(指數運算),反向傳播求誤差梯度時,求導涉及除法,計算
    量相對大,而采用Relu激活函數,整個過程的計算量節省很多。
  2. sigmoid函數反向傳播時,很容易就會出現梯度消失的情況,從而無法完成深層網絡的訓
    練。
  3. Relu會使一部分神經元的輸出為0,這樣就造成了網絡的稀疏性,并且減少了參數的相互依
    存關系,緩解了過擬合問題的發生。
3.3 LeakReLu

在這里插入圖片描述

3.5 SoftMax

softmax用于多分類過程中,它是二分類函數sigmoid在多分類上的推廣,目的是將多分類的結果以概率的形式展現出來。

softmax直白來說就是將網絡輸出的logits通過softmax函數,就映射成為(0,1)的值,而這些值的累和為1(滿足概率的性質),那么我們將它理解成概率,選取概率最大(也就是值對應最大的)接點,作為我們的預測目標類別。

3.6 其他激活函數

在這里插入圖片描述

3.7 如何選擇激活函數

隱藏層

  • 優先選擇RELU激活函數
  • 如果ReLu效果不好,那么嘗試其他激活,如Leaky ReLu等
  • 如果你使用了Relu, 需要注意一下Dead Relu問題, 避免出現大的梯度從而導致過多的神經元死亡
  • 不要使用sigmoid激活函數,可以嘗試使用tanh激活函數

輸出層

  • 二分類問題選擇sigmoid激活函數
  • 多分類問題選擇softmax激活函數
  • 回歸問題選擇identity激活函數

4. 神經網絡的優缺點

1.優點

  • 精度高,性能優于其他的機器學習方法,甚至在某些領域超過了人類
  • 可以近似任意的非線性函數
  • 隨之計算機硬件的發展,近年來在學界和業界受到了熱捧,有大量的框架和庫可供調用
    2.缺點
  • 黑箱,很難解釋模型是怎么工作的
  • 訓練時間長,需要大量的計算力
  • 網絡結構復雜,需要調整超參數
  • 小數據集上表現不佳,容易發生過擬合

5.神經網絡案例

手寫數字的識別

# 導入相應的工具包
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = (7,7) # Make the figures a bit bigger
import tensorflow as tf
# 數據集
from tensorflow.keras.datasets import mnist
# 構建序列模型
from tensorflow.keras.models import Sequential
# 導入需要的層
from tensorflow.keras.layers import Dense, Dropout,
Activation,BatchNormalization
# 導入輔助工具包
from tensorflow.keras import utils
# 正則化
from tensorflow.keras import regularizers# 類別總數
nb_classes = 10
# 加載數據集
(X_train, y_train), (X_test, y_test) = mnist.load_data()
# 打印輸出數據集的維度
print("訓練樣本初始維度", X_train.shape)
print("訓練樣本目標值初始維度", y_train.shape)# 數據展示:將數據集的前九個數據集進行展示
for i in range(9):
plt.subplot(3,3,i+1)
# 以灰度圖顯示,不進行插值
plt.imshow(X_train[i], cmap='gray', interpolation='none')
# 設置圖片的標題:對應的類別
plt.title("數字{}".format(y_train[i]))# 數據處理
# 神經網絡中的每個訓練樣本是一個向量,因此需要對輸入進行重塑,使每個28x28的圖像成為一個的784維向量。另外,將輸入數據進行歸一化處理,從0-255調整到0-1# 調整數據維度:每一個數字轉換成一個向量
X_train = X_train.reshape(60000, 784)
X_test = X_test.reshape(10000, 784)
# 格式轉換
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
# 歸一化
X_train /= 255
X_test /= 255
# 維度調整后的結果
print("訓練集:", X_train.shape)
print("測試集:", X_test.shape)# 將目標值轉換為熱編碼的形式
Y_train = utils.to_categorical(y_train, nb_classes)
Y_test = utils.to_categorical(y_test, nb_classes)# 利用序列模型來構建模型
model = Sequential()
# 全連接層,共512個神經元,輸入維度大小為784
model.add(Dense(512, input_shape=(784,)))
# 激活函數使用relu
model.add(Activation('relu'))
# 使用正則化方法drouout
model.add(Dropout(0.2))
# 全連接層,共512個神經元,并加入L2正則化
model.add(Dense(512,kernel_regularizer=regularizers.l2(0.001)))
# BN層
model.add(BatchNormalization())
# 激活函數
model.add(Activation('relu'))
model.add(Dropout(0.2))
# 全連接層,輸出層共10個神經元
model.add(Dense(10))
# softmax將神經網絡輸出的score轉換為概率值
model.add(Activation('softmax'))# 模型編譯,指明損失函數和優化器,評估指標
model.compile(loss='categorical_crossentropy', optimizer='adam',metrics=
['accuracy'])# batch_size是每次送入模型中樣本個數,epochs是所有樣本的迭代次數,并指明驗證數據集
history = model.fit(X_train, Y_train,
batch_size=128, epochs=4,verbose=1,
validation_data=(X_test, Y_test))

Q1: 為什么要對數據進行歸一化

在這里插入圖片描述

Q2:為什么要對數據進行熱編碼
在這里插入圖片描述
在這里插入圖片描述

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

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

相關文章

OpenLayers使用

初學ol&#xff0c;實現了高德地圖不同圖層的切換、交互性地圖飛行以及加載本地JSON數據。說一下不同圖層切換的想法&#xff1a;1.對于標準地圖和衛星地圖&#xff1a;二者最初便掛載到map上&#xff0c;兩個圖層是疊加顯示的&#xff1b;當點擊按鈕時&#xff0c;其實是使用 …

day4--上傳圖片、視頻

1. 分布式文件系統 1.1 什么是分布式文件系統 文件系統是負責管理和存儲文件的系統軟件&#xff0c;操作系統通過文件系統提供的接口去存取文件&#xff0c;用戶通過操作系統訪問磁盤上的文件。 下圖指示了文件系統所處的位置&#xff1a; 常見的文件系統&#xff1a;FAT16/FA…

極矢量與軸矢量

物理量分為標量和矢量&#xff0c;矢量又分為極矢量和軸矢量。 矢量是既有大小又有方向并按平行四邊形法則相加的量。矢量有極矢量和軸矢量兩種&#xff0c;其間的區別是在鏡像反射變換下遵循不同的變換規律,許多物理量都是矢量,同樣,其中也有極矢量和軸矢量的區分,在力學中,例…

文章發布易優CMS(Eyoucms)網站技巧

為了更快的上手數據采集及發布到易優CMS(eyoucms)網站&#xff0c;特地總結了些新手常常會遇到的操作問題與技巧&#xff0c;如下&#xff1a; 免費易優CMS采集發布插件下載&#xff0c;兼容火車頭、八爪魚、簡數采集等 目錄 1. 發布到易優CMS指定欄目 2. 發布文章到易優CM…

INA226 數據手冊解讀

INA226是一款數字電流檢測放大器&#xff0c;配備I2C和SMBus兼容接口。該器件可提供數字電流、電壓以及功率讀數&#xff0c;可靈活配置測量分辨率&#xff0c;并具備連續運行與觸發操作模式。該芯片通常由一個單獨的電源供電&#xff0c;電壓范圍為 2.7V 至 5.5V引腳說明??引…

Linux 中替換sed

以下是關于 sed&#xff08;Stream Editor&#xff09;的深度詳解和日常高頻使用場景&#xff0c;結合實用示例說明&#xff1a;一、sed 核心概念 流式編輯器&#xff1a;逐行處理文本&#xff0c;不直接修改源文件&#xff08;除非使用 -i 選項&#xff09;正則支持&#xff1…

ADB 調試日志全攻略:如何開啟與關閉 `ADB_TRACE` 日志

ADB 調試日志全攻略&#xff1a;如何開啟與關閉 ADB_TRACE 日志 ADB&#xff08;Android Debug Bridge&#xff09;是 Android 開發的核心工具&#xff0c;但在排查問題時&#xff0c;默認日志可能不夠詳細。通過設置環境變量 ADB_TRACE&#xff0c;可以開啟 全量調試日志&…

實現druid數據源密碼加密

生成加密密碼集成了druid鏈接池的&#xff0c;可以實現數據源密碼加密。加密方式如下構建單元測試&#xff0c;并輸入密碼即可生成加密密碼以及加密公鑰Test public void testPwd() throws Exception {String password "123456";String[] arr com.alibaba.druid.fi…

【TCP/IP】20. 因特網安全

20. 因特網安全20. 因特網安全20.1 安全威脅20.2 安全服務20.3 基本安全技術20.3.1 密碼技術20.3.2 報文鑒別技術20.3.3 身份認證技術20.3.4 數字簽名技術20.3.5 虛擬專用網&#xff08;VPN&#xff09;技術20.3.6 防火墻技術20.3.7 防病毒技術20.4 IP 層安全20.5 傳輸層安全20…

數據結構之位圖和布隆過濾器

系列文章目錄 數據結構之ArrayList_arraylist o(1) o(n)-CSDN博客 數據結構之LinkedList-CSDN博客 數據結構之棧_棧有什么方法-CSDN博客 數據結構之隊列-CSDN博客 數據結構之二叉樹-CSDN博客 數據結構之優先級隊列-CSDN博客 常見的排序方法-CSDN博客 數據結構之Map和Se…

Web攻防-PHP反序列化魔術方法觸發條件POP鏈構造變量屬性修改黑白盒角度

知識點&#xff1a; 1.WEB攻防-PHP反序列化-序列化和反序列化 2.WEB攻防-PHP反序列化-常見魔術方法觸發規則 3.WEB攻防-PHP反序列化-反序列化漏洞產生原因 4.WEB攻防-PHP反序列化-黑白盒&POP鏈構造 一、演示案例-WEB攻防-PHP反序列化-序列化和反序列化 什么是反序列化操作…

C# VB.NET多進程-管道通信,命名管道(Named Pipes)

要向已運行的進程發送特定命令&#xff08;如/exit&#xff09;&#xff0c;而不是啟動新進程&#xff0c;需要使用進程間通信&#xff08;IPC&#xff09;機制。以下是幾種常見的實現方法&#xff1a;一、使用命名管道&#xff08;Named Pipes&#xff09;如果ABC.EXE支持通過…

C++ 右值引用 (Rvalue References)

右值引用是C11引入的革命性特性&#xff0c;它徹底改變了C中資源管理和參數傳遞的方式。下面我將從多個維度深入講解右值引用。一、核心概念1. 值類別(Value Categories)lvalue (左值): 有標識符、可取地址的表達式int x 10; // x是左值 int* p &x; // 可以取地址rvalue…

反激變換器設計全流程(一)——電路拓撲及工作流程

一、電路拓撲原理 拓撲結構概述 開關反激電源采用反激式拓撲結構&#xff0c;主要由開關管&#xff08;通常為 MOSFET&#xff09;、變壓器、輸出整流二極管、輸出濾波電容以及控制電路等組成。其基本工作原理是通過開關管的周期性開關動作&#xff0c;將輸入直流電壓轉換為高…

uniapp語音播報天氣預報微信小程序

1.產品展示2.頁面功能(1)點擊上方按鈕實現語音播報4天天氣情況。3.uniapp代碼<template><view class"container"><view class"header"><text class"place">地址:{{city}}</text><text class"time"&g…

Pycharm 報錯 Environment location directory is not empty 如何解決

好長時間不看不寫代碼了&#xff0c;人也跟著犯糊涂。今天在Pycharm 導入虛擬環境時&#xff0c;一直報錯&#xff1a;“Environment location directory is not empty”&#xff0c;在網上百度很多很多方法都無法解決&#xff0c;直到我翻出我之前自己寫的導入虛擬環境的詳細過…

React強大且靈活hooks庫——ahooks入門實踐之場景類(scene)hook詳解

什么是 ahooks&#xff1f; ahooks 是一個 React Hooks 庫&#xff0c;提供了大量實用的自定義 hooks&#xff0c;幫助開發者更高效地構建 React 應用。其中場景類 hooks 是 ahooks 的一個重要分類&#xff0c;專門針對特定業務場景提供解決方案。 安裝 ahooks npm install …

大模型之Langchain篇(二)——RAG

寫在前面 跟著樓蘭老師學習【LangChain教程】2025吃透LangChain框架快速上手與深度實戰&#xff0c;全程干貨無廢話&#xff0c;三天學完&#xff0c;讓你少走百分之99彎路&#xff01;_嗶哩嗶哩_bilibili 計算相似度 一般用的余弦相似度&#xff0c;這里只是演示計算。 fr…

深入理解圖像二值化:從靜態圖像到視頻流實時處理

一、引言&#xff1a;圖像分析&#xff0c;從“黑與白”開始在計算機視覺任務中&#xff0c;**圖像二值化&#xff08;Image Binarization&#xff09;**是最基礎也是最關鍵的圖像預處理技術之一。它通過將灰度圖像中每個像素轉換為兩個離散值&#xff08;通常是0和255&#xf…

云蝠智能 VoiceAgent重構企業呼入場景服務范式

在數字化轉型浪潮中&#xff0c;企業呼入場景面臨客戶服務需求激增與人力成本攀升的雙重挑戰。傳統呼叫中心日均處理僅 300-500 通電話&#xff0c;人力成本占比超 60%&#xff0c;且服務質量受情緒波動影響顯著。云蝠智能推出的 VoiceAgent 語音智能體&#xff0c;通過全棧自研…