神經網絡 非線性激活層 正則化層 線性層

  1. 神經網絡 非線性激活層

    作用:增強模型的非線性擬合能力

    非線性激活層網絡:

    class activateNet(nn.Module):def __init__(self):super(activateNet,self).__init__()self.relu = nn.ReLU()self.sigmoid = nn.Sigmoid()def forward(self,input):#output = self.relu(input)output = self.sigmoid(input)return outputactivatenet = activateNet()
    

    relu:

    在這里插入圖片描述

    sigmoid:

    在這里插入圖片描述

    完整代碼:

    這里是將上一步池化層的輸出作為非線性激活層的輸入

    code:

    import torch
    import torchvision
    from torch import nn
    from torch.nn import Conv2d, MaxPool2d
    from torch.utils.data import DataLoader
    from torch.utils.tensorboard import SummaryWriter
    from torchvision.datasets import ImageFolder
    from torchvision import transforms#數據預處理
    transform = transforms.Compose([transforms.Resize((224,224)),transforms.ToTensor(),transforms.Normalize(mean = [0.5,0.5,0.5],std = [0.5,0.5,0.5])
    ])#加載數據集
    folder_path = '../images'
    dataset = ImageFolder(folder_path,transform=transform)
    dataloader = DataLoader(dataset,batch_size=1)#卷積
    class convNet(nn.Module):def __init__(self):#調用父類nn.Module的構造函數super(convNet,self).__init__()self.conv1 = Conv2d(in_channels=3,out_channels=6,kernel_size=3,stride=1,padding=0)def forward(self,x):x = self.conv1(x)return xconvnet = convNet()#池化
    class poolNet(nn.Module):def __init__(self):super(poolNet,self).__init__()#ceil_mode=True表示邊緣不滿3x3的部分也會被池化#kernel_size=3 默認是卷積核的大小self.maxpool1 = MaxPool2d(kernel_size=3,ceil_mode=True)self.maxpool2 = MaxPool2d(kernel_size=3,ceil_mode=False)def forward(self,input):output = self.maxpool1(input)#output = self.maxpool2(input)return outputpoolnet = poolNet()#非線性激活層(這里使用relu、sigmoid)
    class activateNet(nn.Module):def __init__(self):super(activateNet,self).__init__()self.relu = nn.ReLU()self.sigmoid = nn.Sigmoid()def forward(self,input):#output = self.relu(input)output = self.sigmoid(input)return outputactivatenet = activateNet()writer = SummaryWriter('../logs')cnt = 0
    for data in dataloader:img,label = dataprint(img.shape)conv_output = convnet(img)print(conv_output.shape)writer.add_images('input',img,cnt)conv_output = torch.reshape(conv_output,(-1,3,222,222))writer.add_images('conv_output',conv_output,cnt)pool_output = poolnet(conv_output)writer.add_images('pool_output',pool_output,cnt)activate_output = activatenet(pool_output)writer.add_images('activate_output',activate_output,cnt)cnt = cnt + 1writer.close()
    
  2. 神經網絡 正則化層

    防止過擬合

    比較簡單 不寫了

    這這里區別幾個概念:

    - 歸一化:將數據映射到特定區間(如[0,1]或[-1,1])的過程,常見方法如min-max歸一化,通過減去最小值并除以極差實現。其目的是消除不同特征量綱差異的影響,使數據處于統一量級,便于模型快速收斂,例如將圖像像素值從0-255轉換為0-1。

    - 標準化:將數據轉換為均值為0、標準差為1的分布,即通過減去均值并除以標準差實現(z-score標準化)。它能讓數據更符合正態分布,降低異常值對模型的影響,常用于線性回歸、SVM等對數據分布敏感的算法中。

    - 正則化:在模型訓練中加入額外約束(如L1、L2范數)以防止過擬合的技術。L1正則化通過懲罰權重絕對值,可產生稀疏權重;L2正則化(權重衰減)懲罰權重平方,使權重更平滑。其核心是平衡模型復雜度與擬合能力,提升泛化性能。

  3. 神經網絡 線性層(全連接層)

    輸入為上一步非線性激活層的輸出

    線性層:

    code:

    class linearNet(nn.Module):def __init__(self):super(linearNet,self).__init__()#in_features(根據下面展開后輸出的數值) 表示輸入特征的維度,out_features=10 表示輸出特征的維度self.linear = nn.Linear(32856,10)def forward(self,input):output = self.linear(input)return outputlinearnet = linearNet()
    

    in_features:

        #為了得到in_featuresprint(torch.reshape(activate_output,(1,1,1,-1)).shape)
    

    在這里插入圖片描述

    完整代碼:

    code:

    import torch
    import torchvision
    from torch import nn
    from torch.nn import Conv2d, MaxPool2d
    from torch.utils.data import DataLoader
    from torch.utils.tensorboard import SummaryWriter
    from torchvision.datasets import ImageFolder
    from torchvision import transforms#數據預處理
    transform = transforms.Compose([transforms.Resize((224,224)),transforms.ToTensor(),transforms.Normalize(mean = [0.5,0.5,0.5],std = [0.5,0.5,0.5])
    ])#加載數據集
    folder_path = '../images'
    dataset = ImageFolder(folder_path,transform=transform)
    #drop_last=True 表示最后一個batch可能小于batch_size,不足的部分會被丟棄
    #dataloader = DataLoader(dataset,batch_size=1,drop_last=True)
    dataloader = DataLoader(dataset,batch_size=1)#卷積
    class convNet(nn.Module):def __init__(self):#調用父類nn.Module的構造函數super(convNet,self).__init__()self.conv1 = Conv2d(in_channels=3,out_channels=6,kernel_size=3,stride=1,padding=0)def forward(self,x):x = self.conv1(x)return xconvnet = convNet()#池化
    class poolNet(nn.Module):def __init__(self):super(poolNet,self).__init__()#ceil_mode=True表示邊緣不滿3x3的部分也會被池化#kernel_size=3 默認是卷積核的大小self.maxpool1 = MaxPool2d(kernel_size=3,ceil_mode=True)self.maxpool2 = MaxPool2d(kernel_size=3,ceil_mode=False)def forward(self,input):output = self.maxpool1(input)#output = self.maxpool2(input)return outputpoolnet = poolNet()#非線性激活層(這里使用relu、sigmoid)
    class activateNet(nn.Module):def __init__(self):super(activateNet,self).__init__()self.relu = nn.ReLU()self.sigmoid = nn.Sigmoid()def forward(self,input):#output = self.relu(input)output = self.sigmoid(input)return outputactivatenet = activateNet()#線性層(全連接層)
    class linearNet(nn.Module):def __init__(self):super(linearNet,self).__init__()#in_features(根據下面展開后輸出的數值) 表示輸入特征的維度,out_features=10 表示輸出特征的維度self.linear = nn.Linear(32856,10)def forward(self,input):output = self.linear(input)return outputlinearnet = linearNet()writer = SummaryWriter('../logs')cnt = 0
    for data in dataloader:img,label = dataprint(img.shape)conv_output = convnet(img)print(conv_output.shape)writer.add_images('input',img,cnt)conv_output = torch.reshape(conv_output,(-1,3,222,222))writer.add_images('conv_output',conv_output,cnt)pool_output = poolnet(conv_output)writer.add_images('pool_output',pool_output,cnt)activate_output = activatenet(pool_output)writer.add_images('activate_output',activate_output,cnt)#為了得到in_featuresprint(torch.reshape(activate_output,(1,1,1,-1)).shape)#flatten:展開成一維數組linear_output = torch.flatten(activate_output)linear_output = linearnet(linear_output)print(linear_output.shape)cnt = cnt + 1writer.close()
    

    在這里插入圖片描述

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

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

相關文章

【Vue進階學習筆記】組件通信專題精講

目錄前言props 父傳子原理說明使用場景代碼示例父組件 PropsTest.vue子組件 Child.vue自定義事件 $emit 子傳父原理說明使用場景代碼示例父組件 EventTest.vue子組件 Event2.vueEvent Bus 兄弟/跨層通信原理說明使用場景代碼示例事件總線 bus/index.ts兄弟組件通信示例Child2.v…

【PTA數據結構 | C語言版】求最小生成樹的Prim算法

本專欄持續輸出數據結構題目集,歡迎訂閱。 文章目錄題目代碼題目 請編寫程序,實現在帶權的無向圖中求最小生成樹的 Prim 算法。 注意:當多個待收錄頂點到當前點集的距離等長時,按編號升序進行收錄。 輸入格式: 輸入首…

【加解密與C】Rot系列(四)RotSpecial

RotSpecial 函數解析RotSpecial 是一個自定義函數,通常用于處理特定的旋轉操作,尤其在圖形變換或數據處理中。該函數可能涉及歐拉角、四元數或其他旋轉表示方法,具體行為取決于實現上下文。以下是關于該函數的通用解釋和可能的使用方法&#…

【機器學習深度學習】LLaMAFactory中的精度訓練選擇——bf16、fp16、fp32與pure_bf16深度解析

目錄 前言 一、 為什么精度如此重要?—— 內存、速度與穩定性的三角博弈 二、 四大精度/模式詳解: bf16, fp16, fp32, pure_bf16 三、 關鍵特性對比表 ▲四大計算類型核心對比表 ▲ 顯存占用對比示例(175B參數模型) ▲LLa…

C# 基于halcon的視覺工作流-章21-點查找

C# 基于halcon的視覺工作流-章21-點查找 本章目標: 一、檢測顯著點; 二、Harris檢測興趣點; 三、Harris二項式檢測興趣點; 四、Sojka運算符檢測角點; 五、Lepetit算子檢測興趣點;一、檢測顯著點 halcon算子…

(11)機器學習小白入門YOLOv:YOLOv8-cls epochs與數據量的關系

YOLOv8-cls epochs與數據量的關系 (1)機器學習小白入門YOLOv :從概念到實踐 (2)機器學習小白入門 YOLOv:從模塊優化到工程部署 (3)機器學習小白入門 YOLOv: 解鎖圖片分類新技能 (4)機器學習小白入門YOLOv :圖片標注實操手冊 (5)機…

Grafana | 如何將 11.x 升級快速到最新 12.x 版本?

[ 知識是人生的燈塔,只有不斷學習,才能照亮前行的道路 ]📢 大家好,我是 WeiyiGeek,一名深耕安全運維開發(SecOpsDev)領域的技術從業者,致力于探索DevOps與安全的融合(Dev…

Dubbo + Spring Boot + Zookeeper 快速搭建分布式服務

Dubbo Spring Boot Zookeeper 快速搭建分布式服務 本文將詳細介紹如何基于 Dubbo、Spring Boot 和 Zookeeper 快速搭建一個簡單的分布式服務調用場景,包含服務提供者(Provider)、服務消費者(Consumer)及公共接口&…

五分鐘掌握 TDengine 數據文件的工作原理

小 T 導讀:今天我們來探討一下——TDengine中的時序數據到底是如何存儲的? 在上一期的文章《五分鐘掌握 TDengine 時序數據的保留策略》中,我們知道了TDengine是如何按照時間段對數據進行分區來管理數據的。 接下來,我們和大家一起…

Python爬蟲實戰:研究http-parser庫相關技術

一、研究背景與意義 在當今數字化時代,網絡數據蘊含著巨大的價值。從商業決策、學術研究到社會治理,對海量網絡信息的有效采集與分析至關重要。網絡爬蟲作為數據獲取的核心工具,其性能與穩定性直接影響數據質量。然而,隨著互聯網技術的發展,網站反爬機制不斷升級,傳統爬…

Go語言實戰案例-批量重命名文件

在《Go語言100個實戰案例》中的 文件與IO操作篇 - 案例17:批量重命名文件 的完整內容,適合初學者實踐如何使用 Go 操作文件系統并批量處理文件名。🎯 案例目標實現一個小工具,能夠批量重命名指定目錄下的所有文件,例如…

基于單片機非接觸紅外測溫系統

傳送門 👉👉👉👉其他作品題目速選一覽表 👉👉👉👉其他作品題目功能速覽 概述 本設計實現了一種基于單片機的非接觸式紅外測溫系統,適用于快速、安全測量物體表面溫…

Python 入門手札:從 0 到會--第十天Python常用的第三方庫Numpy,Pandas,Matplotlib

目錄 一、Numpy 1.NumPy 是什么? 1.1安裝numpy 1.2 導入numpy模塊 2.NumPy 的核心:ndarray 2.1 什么是 ndarray? 2.2 ndarray 的創建方式 2.3 常見屬性(用于查看數組結構) 2.4 ndarray 的切片與索引 2.5 ndarr…

mysql 性能優化之Explain講解

EXPLAIN是 MySQL 中用于分析查詢執行計劃的重要工具,通過它可以查看查詢如何使用索引、掃描數據的方式以及表連接順序等信息,從而找出性能瓶頸。以下是關于EXPLAIN的詳細介紹和實戰指南:1. EXPLAIN 基本用法在SELECT、INSERT、UPDATE、DELETE…

Redis 連接:深度解析與最佳實踐

Redis 連接:深度解析與最佳實踐 引言 Redis 作為一款高性能的內存數據結構存儲系統,在當今的互聯網應用中扮演著越來越重要的角色。高效的 Redis 連接管理對于保證系統的穩定性和性能至關重要。本文將深入探討 Redis 連接的原理、配置以及最佳實踐,幫助讀者更好地理解和應…

C語言---VSCODE的C語言環境搭建

文章目錄資源下載配置環境驗證資源下載 站內下載 配置環境 解壓壓縮包,復制以下文件的路徑 打開主頁搜索系統環境變量 點擊環境變量 選擇系統變量中的Path,點擊編輯 在最后面添加路徑。 添加完成記得關機重啟。 驗證 重啟電腦之后打開在Power…

ojdbc對應jdk版本附下載地址(截止20250722)

可以從Oracle官網查看, JDBC and UCP Downloads page

Redis為什么被設計成是單線程的?

Redis單線程模型解析 當我們說Redis是單線程時,特指"其網絡IO和鍵值對讀寫操作由單個線程完成"。實際上,Redis僅網絡請求模塊和數據操作模塊采用單線程設計,而持久化存儲、集群支持等其他模塊都采用了多線程架構。 事實上,Redis從4.0版本就開始對部分命令實現了…

基礎流程圖

一、常用符號及定義二、 畫圖基礎規則1、從上至下,從左至右流向順序。2、開始符號只能有一個出口。3、進程符號不做校驗邏輯。4、相同流程圖,符號大小應為一致。5、引用流程,不重復繪制。6、路徑符號盡量避免交叉重疊。7、同一路徑&#xff0…

C# 結構體

目錄 1.如何定義一個結構體(struct 關鍵字) 2.如何使用一個結構體 3.如何修改一個數據 4.如何讓去訪問一個學生的信息 5、結構體數組 練習 1.如何定義一個結構體(struct 關鍵字) C#中public 、private、protect的區別 結構…