神經網絡基礎及API使用詳解

一、神經網絡概述

神經網絡是一種模仿生物神經網絡結構和功能的計算模型,它由大量的人工神經元相互連接構成,能夠通過調整內部大量節點之間相互連接的關系,從而達到處理信息的目的。

?

1.1 神經網絡的基本組成

  • 輸入層:接收原始數據

  • 隱藏層:負責特征提取和轉換(可以有多層)

  • 輸出層:輸出最終結果

  • 權重(Weights):連接神經元之間的強度

  • 偏置(Bias):增加模型的靈活性

  • 激活函數:引入非線性因素

?

1.2 神經網絡的工作流程

  1. 前向傳播:數據從輸入層流向輸出層

  2. 計算損失:比較預測值與真實值的差異

  3. 反向傳播:根據損失調整權重和偏置

  4. 參數更新:使用優化器更新網絡參數

二、使用TensorFlow構建神經網絡

TensorFlow是Google開發的開源機器學習框架,下面我們詳細介紹如何使用TensorFlow構建神經網絡。

2.1 TensorFlow核心API介紹

2.1.1 tf.keras.Sequential

Sequential模型是層的線性堆疊,適用于簡單的網絡結構。

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers# 創建一個Sequential模型
model = keras.Sequential([layers.Dense(64, activation='relu', input_shape=(784,)),layers.Dense(64, activation='relu'),layers.Dense(10, activation='softmax')
])
2.1.2 layers.Dense

Dense是全連接層,主要參數包括:

  • units:正整數,輸出空間的維度

  • activation:激活函數,如'relu', 'sigmoid', 'softmax'等

  • use_bias:布爾值,是否使用偏置向量

  • kernel_initializer:權重矩陣的初始化器

  • bias_initializer:偏置向量的初始化器

  • kernel_regularizer:權重矩陣的正則化函數

  • bias_regularizer:偏置向量的正則化函數

# 更詳細的Dense層示例
dense_layer = layers.Dense(units=128,                           # 輸出維度activation='relu',                   # 激活函數kernel_initializer='he_normal',      # 權重初始化bias_initializer='zeros',            # 偏置初始化kernel_regularizer=keras.regularizers.l2(0.01),  # L2正則化name='dense_layer_1'                 # 層名稱
)

2.2 模型編譯

在訓練模型之前,需要配置學習過程,這是通過compile方法完成的。

model.compile(optimizer=keras.optimizers.Adam(learning_rate=0.001),  # 優化器loss='sparse_categorical_crossentropy',  # 損失函數metrics=['accuracy']                     # 評估指標
)
2.2.1 常用優化器參數
  • keras.optimizers.Adam:

    • learning_rate:學習率,默認為0.001

    • beta_1:一階矩估計的指數衰減率,默認為0.9

    • beta_2:二階矩估計的指數衰減率,默認為0.999

    • epsilon:數值穩定性的小常數,默認為1e-7

  • keras.optimizers.SGD:

    • learning_rate:學習率

    • momentum:動量參數

    • nesterov:是否使用Nesterov動量

2.2.2 常用損失函數
  • binary_crossentropy:二分類問題

  • categorical_crossentropy:多分類問題(標簽為one-hot編碼)

  • sparse_categorical_crossentropy:多分類問題(標簽為整數)

  • mse:回歸問題的均方誤差

2.3 模型訓練

使用fit方法訓練模型:

history = model.fit(x_train,                    # 訓練數據y_train,                    # 訓練標簽batch_size=32,              # 批量大小epochs=10,                  # 訓練輪數validation_split=0.2,       # 驗證集比例verbose=1,                  # 日志顯示模式:0=不輸出,1=進度條,2=每個epoch一行callbacks=[...]             # 回調函數列表
)

2.4 模型評估與預測?

# 評估模型
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)# 進行預測
predictions = model.predict(x_test)

三、PyTorch神經網絡實現

PyTorch是另一個流行的深度學習框架,下面介紹如何使用PyTorch構建神經網絡。

3.1 PyTorch核心API

3.1.1 torch.nn.Module

所有神經網絡模塊的基類,自定義網絡需要繼承此類。

import torch
import torch.nn as nn
import torch.nn.functional as Fclass Net(nn.Module):def __init__(self):super(Net, self).__init__()self.fc1 = nn.Linear(784, 256)  # 輸入層到隱藏層self.fc2 = nn.Linear(256, 128)  # 隱藏層到隱藏層self.fc3 = nn.Linear(128, 10)   # 隱藏層到輸出層self.dropout = nn.Dropout(0.2)   # Dropout層def forward(self, x):x = x.view(-1, 784)            # 展平輸入x = F.relu(self.fc1(x))        # 第一層+ReLU激活x = self.dropout(x)            # 應用Dropoutx = F.relu(self.fc2(x))         # 第二層+ReLU激活x = self.dropout(x)            # 應用Dropoutx = self.fc3(x)                # 輸出層return F.log_softmax(x, dim=1)  # LogSoftmax激活
3.1.2 nn.Linear

PyTorch中的全連接層,參數包括:

  • in_features:輸入特征數

  • out_features:輸出特征數

  • bias:是否添加偏置(默認為True)

3.2 訓練過程

# 實例化網絡
model = Net()# 定義損失函數和優化器
criterion = nn.NLLLoss()  # 負對數似然損失
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)# 訓練循環
for epoch in range(10):model.train()  # 設置為訓練模式for data, target in train_loader:optimizer.zero_grad()  # 清空梯度output = model(data)   # 前向傳播loss = criterion(output, target)  # 計算損失loss.backward()        # 反向傳播optimizer.step()       # 更新參數# 驗證model.eval()  # 設置為評估模式val_loss = 0correct = 0with torch.no_grad():  # 不計算梯度for data, target in val_loader:output = model(data)val_loss += criterion(output, target).item()pred = output.argmax(dim=1, keepdim=True)correct += pred.eq(target.view_as(pred)).sum().item()val_loss /= len(val_loader.dataset)print(f'Epoch {epoch}, Validation loss: {val_loss:.4f}, Accuracy: {correct}/{len(val_loader.dataset)} ({100. * correct / len(val_loader.dataset):.0f}%)')

四、神經網絡高級API使用

4.1 Keras函數式API

對于更復雜的模型,可以使用Keras的函數式API:

# 輸入層
inputs = keras.Input(shape=(784,), name='digits')# 中間層
x = layers.Dense(64, activation='relu', name='dense_1')(inputs)
x = layers.Dense(64, activation='relu', name='dense_2')(x)# 輸出層
outputs = layers.Dense(10, activation='softmax', name='predictions')(x)# 創建模型
model = keras.Model(inputs=inputs, outputs=outputs)# 編譯模型
model.compile(optimizer=keras.optimizers.RMSprop(learning_rate=0.001),loss='sparse_categorical_crossentropy',metrics=['accuracy']
)

4.2 自定義層

在Keras中創建自定義層:

class CustomDense(layers.Layer):def __init__(self, units=32, activation=None):super(CustomDense, self).__init__()self.units = unitsself.activation = keras.activations.get(activation)def build(self, input_shape):# 創建可訓練權重self.w = self.add_weight(shape=(input_shape[-1], self.units),initializer='random_normal',trainable=True)self.b = self.add_weight(shape=(self.units,),initializer='zeros',trainable=True)def call(self, inputs):# 實現前向傳播x = tf.matmul(inputs, self.w) + self.bif self.activation is not None:x = self.activation(x)return x# 使用自定義層
model = keras.Sequential([CustomDense(64, activation='relu'),CustomDense(10, activation='softmax')
])

4.3 回調函數

回調函數可以在訓練過程中執行特定操作:

# 定義回調列表
callbacks = [# 早停:當驗證損失不再改善時停止訓練keras.callbacks.EarlyStopping(monitor='val_loss',  # 監控指標patience=5,         # 等待epochs數min_delta=0.001,    # 最小變化量verbose=1),# 模型檢查點:保存最佳模型keras.callbacks.ModelCheckpoint(filepath='best_model.h5',  # 保存路徑monitor='val_loss',        # 監控指標save_best_only=True,       # 只保存最佳模型verbose=1),# 學習率調度器keras.callbacks.ReduceLROnPlateau(monitor='val_loss',  # 監控指標factor=0.1,         # 學習率乘以的因子patience=3,         # 等待epochs數min_lr=0.00001,     # 學習率下限verbose=1)
]# 訓練時使用回調
model.fit(x_train, y_train,epochs=50,validation_data=(x_val, y_val),callbacks=callbacks
)

五、神經網絡應用示例

5.1 圖像分類(CNN)

使用卷積神經網絡進行圖像分類:

# 構建CNN模型
model = keras.Sequential([# 卷積層layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),layers.MaxPooling2D((2, 2)),# 第二個卷積層layers.Conv2D(64, (3, 3), activation='relu'),layers.MaxPooling2D((2, 2)),# 第三個卷積層layers.Conv2D(64, (3, 3), activation='relu'),# 展平后接全連接層layers.Flatten(),layers.Dense(64, activation='relu'),layers.Dense(10, activation='softmax')
])# 編譯模型
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])# 訓練模型
history = model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels))

5.2 文本分類(RNN)

使用循環神經網絡進行文本分類:

# 構建RNN模型
model = keras.Sequential([# 嵌入層:將單詞索引轉換為密集向量layers.Embedding(input_dim=10000, output_dim=64),# LSTM層layers.LSTM(64, return_sequences=True),layers.LSTM(32),# 全連接層layers.Dense(64, activation='relu'),layers.Dropout(0.5),layers.Dense(1, activation='sigmoid')  # 二分類輸出
])# 編譯模型
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])# 訓練模型
history = model.fit(train_data, train_labels,epochs=10,batch_size=32,validation_split=0.2)

六、神經網絡調優技巧

6.1 超參數調優

使用Keras Tuner進行超參數搜索:

import kerastuner as ktdef build_model(hp):model = keras.Sequential()model.add(layers.Flatten(input_shape=(28, 28)))# 調整全連接層單元數hp_units = hp.Int('units', min_value=32, max_value=512, step=32)model.add(layers.Dense(units=hp_units, activation='relu'))# 調整學習率hp_learning_rate = hp.Choice('learning_rate', values=[1e-2, 1e-3, 1e-4])model.add(layers.Dense(10, activation='softmax'))model.compile(optimizer=keras.optimizers.Adam(learning_rate=hp_learning_rate),loss='sparse_categorical_crossentropy',metrics=['accuracy'])return model# 初始化調優器
tuner = kt.Hyperband(build_model,objective='val_accuracy',max_epochs=10,factor=3,directory='my_dir',project_name='mnist')# 執行搜索
tuner.search(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels))# 獲取最佳模型
best_model = tuner.get_best_models(num_models=1)[0]

6.2 正則化技術

防止過擬合的常用方法:

1.L1/L2正則化

# 添加L2正則化的Dense層
layers.Dense(64, activation='relu',kernel_regularizer=keras.regularizers.l2(0.01))

    2.Dropout

    model = keras.Sequential([layers.Dense(64, activation='relu'),layers.Dropout(0.5),  # 隨機丟棄50%的神經元layers.Dense(10, activation='softmax')
    ])

    3.Batch Normalization

    model = keras.Sequential([layers.Dense(64),layers.BatchNormalization(),layers.Activation('relu'),layers.Dense(10, activation='softmax')
    ])

    七、總結

    本文詳細介紹了神經網絡的基本概念、TensorFlow和PyTorch框架的使用方法,包括核心API的參數解釋和示例代碼。我們還探討了高級API使用、自定義層實現、回調函數應用以及神經網絡在不同領域的應用示例。最后,介紹了神經網絡調優的常用技巧。

    神經網絡是深度學習的基礎,掌握其原理和實現方法對于從事人工智能相關工作至關重要。希望本文能夠幫助你更好地理解和應用神經網絡。

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

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

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

    相關文章

    分桶表的介紹和作用

    一、分桶表的基本介紹1、什么是分桶表?分桶表主要是用于分文件的,在建表的時候,指定按照那些字段執行分桶操作,并可以設置需要分多少個桶,當插入數據的時候,執行MR的分區的操作,將數據分散各個分…

    HighReport報表工具開始支持BS報表設計器

    HighReport報表工具同時支持c/s報表設計器和b/s報表設計器,大部分情況下使用c/s報表設計器,在某些業務場景或者用戶自己簡單修改報表模板,可以用b/s報表設計器。b/s報表設計器和c/s報表設計器操作一樣b/s報表設計器免費下載免費使用(c/s報表設…

    數據結構--堆的實現

    目錄 一、堆的概念及結構 二、小根堆的實現 2.1 堆的數據結構 2.2 堆的初始化HeapInit 2.3 堆的銷毀HeapDestory 2.4 堆的插入HeapPush ?2.4.1 插入代碼HeapPush 2.4.2 向上調整代碼AdjustUp 2.4.3 交換數據代碼Swap 2.5 堆的刪除HeapPop 2.5.1 刪除代碼HeapPop 2…

    evo軌跡評估工具

    文章目錄evo參數設置evo_traj指標度量evo_apeevo_rpe結果比較evo工具主要有如下六個常用命令: evo_ape - 用于評估絕對位姿誤差;evo_rpe- 用于評估相對位姿誤差;evo_traj - 這個主要是用來畫軌跡、輸出軌跡文件、轉換數據格式等功能&#xf…

    Django+DRF 實戰:自定義異常處理流程

    文章目錄一、DRF 異常處理流程DRF 默認異常處理流程源碼二、實戰DRF 自定義異常處理流程應用自定義異常處理流程一、DRF 異常處理流程 DRF 默認異常處理流程 DRF默認的異常處理流程如下: 當異常發生時,會自動調用rest_framework.views.exception_hand…

    Spring MVC 1

    什么是Spring Web MVC 官方對Spring MVC的描述是這樣的:Spring Web MVC 是基于Severlet API構建的原始Web框架,從一開始就包含在Spring框架中。它的正式名稱“Spring Web MVC”來自其源模塊的名稱(Spring-webmvc),但它…

    一個基于若依(ruoyi-vue3)的小項目部署記錄

    一、背景 收到朋友的求助,他拿到了一個項目的源代碼,說需要我幫助部署。部署要求是需要域名訪問。 因為沒有文檔和其他資料以及幫助,我先清理了源收到的資料: 1.后端:是java代碼,一看就是若依框架。心里大大…

    【實戰總結】WMIC在HW行動中的4類關鍵應用

    WMIC命令完全指南:網絡安全運維工程師的深度實踐手冊 關鍵詞:WMIC命令、Windows管理、網絡安全運維、系統信息收集、進程分析、自動化審計 【實戰總結】WMIC在HW行動中的4類關鍵應用 1. 前言 在Windows環境下的網絡安全運維中,WMIC&#x…

    LKT4304穩定可靠高兼容性國產安全加密芯片

    隨著 IOT 的飛速發展,智能家居,智能汽車,智能工控等物聯網設備和云服務的安全問題成為IOT普及的關鍵障礙。在設計之初就為物聯網產品配備正確的安全解決方案,是幫助預防措施的關鍵所在。LKT4304是凌科芯安專為物聯網應用場景而推出…

    Android 網絡開發核心知識點

    Android 網絡開發核心知識點 一、基礎網絡通信 1. HTTP/HTTPS 協議 HTTP方法:GET、POST、PUT、DELETE等狀態碼:200(成功)、404(未找到)、500(服務器錯誤)等HTTPS加密:SSL/TLS握手過程報文結構:請求頭/響應頭、請求體/響應體 2. 網…

    DVWA靶場通關筆記-弱會話IDs(Weak Session IDs Medium級別)

    目錄 一、Session ID 二、代碼審計(Medium級別) 1、配置security為Medium級別 2、源碼分析 (1)index.php (2)Medium.php (3)對比分析 (4)滲透思路 三…

    編輯器Vim的快速入門

    如大家所了解的,Vim是一個很古老的編輯器,但是并沒有隨著時間的流逝消失在編輯器/IDE 的競爭中,Vim 獨創的模式機制和 hjkl 移動光標方式使得使用者在編輯文件時可以雙手不離開鍵盤,極大地提升了工作效率。由于 Vim 學習曲線極為陡…

    深度學習核心:從基礎到前沿的全面解析

    🧠 深度學習核心:從基礎到前沿的全面解析 🚀 探索深度學習的核心技術棧,從神經網絡基礎到最新的Transformer架構 📋 目錄 🔬 神經網絡基礎:從感知機到多層網絡🖼? 卷積神經網絡&am…

    MySQL索引:數據庫的超級目錄

    MySQL索引:數據庫的「超級目錄」 想象你有一本1000頁的百科全書,要快速找到某個知識點(如“光合作用”): ? 無索引:逐頁翻找 → 全表掃描(慢!)? 有索引:直接…

    景觀橋 涵洞 城門等遮擋物對汽車安全性的影響數學建模和計算方法,需要收集那些數據

    對高速公路景觀橋影響行車視距的安全問題進行數學建模,需要將物理幾何、動力學、概率統計和交通流理論結合起來。以下是分步驟的建模思路和關鍵模型:一、 核心建模目標 量化視距(Sight Distance, SD):計算實際可用視距…

    Git 用戶名和郵箱配置指南:全局與項目級設置

    查看全局配置 git config --global user.name # 查看全局name配置 git config --global user.email # 查看全局email配置 git config --global --list # 查看所有全局配置查看當前項目配置 git config user.name # 查看當前項目name配置 git config user.email # 查看當前項目…

    視頻序列和射頻信號多模態融合算法Fusion-Vital解讀

    視頻序列和射頻信號多模態融合算法Fusion-Vital解讀概述模型整體流程視頻幀時間差分歸一化TSM模塊視頻序列特征融合模塊跨模態特征融合模塊概述 最近看了Fusion-Vital的視頻-射頻(RGB-RF)融合Transformer模型。記錄一下,對于實際項目中的多模…

    frp內網穿透下創建FTP(解決FTP“服務器回應不可路由的地址。使用服務器地址替代”錯誤)

    使用寶塔面板,點擊FTP,下載Pure-FTPd插件 點擊Pure-FTPd插件,修改配置文件,找到PassivePortRange, 修改ftp被動端口范圍為39000 39003,我們只需要4個被動端口即可,多了不好在內網穿透frp的配置文件中增加…

    STM32控制四自由度機械臂(SG90舵機)(硬件篇)(簡單易復刻)

    1.前期硬件準備 2s鋰電池一個(用于供電),stm32f103c8t6最小系統板一個(主控板),兩個搖桿(用于搖桿模式),四個電位器(用于示教器模式)&#xff0c…

    華為OD機試_2025 B卷_最差產品獎(Python,100分)(附詳細解題思路)

    題目描述 A公司準備對他下面的N個產品評選最差獎, 評選的方式是首先對每個產品進行評分,然后根據評分區間計算相鄰幾個產品中最差的產品。 評選的標準是依次找到從當前產品開始前M個產品中最差的產品,請給出最差產品的評分序列。 輸入描述 第…