昇思25天學習打卡營第5天 | 網絡構建

目錄

1.定義模型類

2.模型層

nn.Flatten

nn.Dense

nn.ReLU

nn.SequentialCell

nn.Softmax

3.模型參數

代碼實現:

總結


神經網絡模型是由神經網絡層和Tensor操作構成的,

mindspore.nn提供了常見神經網絡層的實現,

在MindSpore中,Cell類是構建所有網絡的基類,也是網絡的基本單元。

一個神經網絡模型表示為一個Cell,它由不同的子Cell構成。

使用這樣的嵌套結構,可以簡單地使用面向對象編程的思維,對神經網絡結構進行構建和管理

1.定義模型類

定義神經網絡時,可以繼承nn.Cell類,在__init__方法中進行子Cell的實例化和狀態管理,在construct方法中實現Tensor操作。

construct意為神經網絡(計算圖)構建

構建完成后,實例化Network對象,并查看其結構:

三個全連接層(Dense)和兩個ReLU激活函數的序列模型

class Network(nn.Cell):def __init__(self):super().__init__()self.flatten = nn.Flatten()self.dense_relu_sequential = nn.SequentialCell(nn.Dense(28*28, 512, weight_init="normal", bias_init="zeros"),nn.ReLU(),nn.Dense(512, 512, weight_init="normal", bias_init="zeros"),nn.ReLU(),nn.Dense(512, 10, weight_init="normal", bias_init="zeros"))def construct(self, x):x = self.flatten(x)logits = self.dense_relu_sequential(x)return logitsmodel = Network()
print(model)

我們構造一個輸入數據,直接調用模型,可以獲得一個十維的Tensor輸出,其包含每個類別的原始預測值。

model.construct()方法不可直接調用。

在此基礎上,我們通過一個nn.Softmax層實例來獲得預測概率。

X = ops.ones((1, 28, 28), mindspore.float32)
logits = model(X)
# print logits
logits
pred_probab = nn.Softmax(axis=1)(logits)
y_pred = pred_probab.argmax(1)
print(f"Predicted class: {y_pred}")

2.模型層

我們分解上面構造的神經網絡模型中的每一層。首先我們構造一個shape為(3, 28, 28)的隨機數據(3個28x28的圖像),依次通過每一個神經網絡層來觀察其效果。

input_image = ops.ones((3, 28, 28), mindspore.float32)
print(input_image.shape)

nn.Flatten

實例化nn.Flatten層,將28x28的2D張量轉換為784大小的連續數組。

nn.Dense

nn.Dense為全連接層,其使用權重和偏差對輸入進行線性變換。

nn.ReLU

nn.ReLU層給網絡中加入非線性的激活函數,幫助神經網絡學習各種復雜的特征。

nn.SequentialCell

nn.SequentialCell是一個有序的Cell容器。輸入Tensor將按照定義的順序通過所有Cell。我們可以使用SequentialCell來快速組合構造一個神經網絡模型。

nn.Softmax

最后使用nn.Softmax將神經網絡最后一個全連接層返回的logits的值縮放為[0, 1],表示每個類別的預測概率。axis指定的維度數值和為1。

3.模型參數

網絡內部神經網絡層具有權重參數和偏置參數(如nn.Dense),這些參數會在訓練過程中不斷進行優化,可通過?model.parameters_and_names()?來獲取參數名及對應的參數詳情。

代碼實現:

總結

構建網絡,定義模型類時,要有這個框架,繼承類,在他里面進行實例化和狀態管理:

  1. class Network(nn.Cell): 定義了一個類,繼承自 nn.Cell

  2. def __init__(self):??Network 類的構造函數,初始化類的屬性。

  3. super().__init__(): 調用父類 nn.Cell 的構造函數。

  4. def construct(self, x): 定義了 Network 類的 construct 方法,它是MindSpore中定義模型前向傳播邏輯的方法。參數 x 表示輸入數據。

  5. x = self.flatten(x): 使用 self.flatten 層將輸入數據 x 展平。

  6. logits = self.dense_relu_sequential(x): 將展平后的數據 x 通過 self.dense_relu_sequential 序列模型進行前向傳播,得到模型的原始輸出 logits。在分類任務中,logits 是模型的線性輸出

  7. return logits: 返回模型的輸出 logits

class Network(nn.Cell):def __init__(self):super().__init__()def construct(self, x):x = self.flatten(x)logits = self.dense_relu_sequential(x)return logits
  1. self.flatten = nn.Flatten(): 初始化一個 nn.Flatten 層,這個層用于將多維輸入數據展平為一維數據。在處理圖像數據時,通常需要將圖像的二維數據(例如,28x28像素)展平為一維向量。

  2. self.dense_relu_sequential = nn.SequentialCell(...): 初始化一個序列模型,包含三個全連接層(nn.Dense)和兩個ReLU激活函數(nn.ReLU)。這個序列模型的初始化與之前解釋的相同。

預測的時候:

1. pred_probab = nn.Softmax(axis=1)(logits): 使用了 nn.Softmax 函數來將模型的輸出 logits 轉換為概率分布。

Softmax 函數通常用于多類分類問題的輸出層,它可以將一個向量的元素轉換為一個概率分布,使得所有元素的和為1。

參數 axis=1 表示 Softmax 函數將在第二個維度(通常是特征維度)上應用,即對于每個樣本,將其對應的 logits 轉換為概率。

2. y_pred = pred_probab.argmax(1): 這行代碼使用了 argmax 函數來找到每個樣本概率最高的類別索引。argmax 函數返回輸入數組中最大元素的索引。在這里,它沿著第二個維度(即每個樣本的概率分布)找到最大值的索引,這代表了模型預測的類別。

pred_probab = nn.Softmax(axis=1)(logits)
y_pred = pred_probab.argmax(1)
print(f"Predicted class: {y_pred}")

別的也沒什么了吧~~~

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

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

相關文章

啟動spring boot項目停止 提示80端口已經被占用

可能的情況: 檢查并結束占用進程: 首先,你需要確定哪個進程正在使用80端口。在Windows上,可以通過命令行輸入netstat -ano | findstr LISTENING | findstr :80來查看80端口的PID,然后在任務管理器中結束該進程。在

AI智能客服項目拆解(1) 產品大綱

本文作為拆解AI智能客服項目的首篇,以介紹產品大綱為主。后續以某AI智能客服產品為例,拆解相關技術細節。 AI智能客服是一種基于人工智能技術的客戶服務解決方案,旨在提高客戶滿意度和優化企業運營。利用人工智能和自然語言處理技術&#xff…

MySQL之索引失效的情況

什么情況下索引會失效? 違反最左前綴原則范圍查詢右邊的列不能使用索引不要在索引列上進行運算操作字符串不加單引號導致索引失效以%開頭的like模糊查詢 什么情況下索引會失效? 示例,有user表如下 CREATE TABLE user (id bigint(20) NOT NU…

實驗1 多層感知器設計(MLP)

1.實驗目的 掌握多層感知器的原理。掌握多層感知器的設計、訓練和測試。2.實驗要求 設計一個多層感知器,用于對給定的數據進行分類。要求代碼格式規范,注釋齊全,程序可正常運行。 3.模型設計 實驗設計一個多層感知機,三層機構,只含一個隱藏層,輸入層,隱藏層,輸出層 1…

JAVA期末速成庫(11)第十二章

一、習題介紹 第十二章 Check Point:P454 12.1,12.9,12.10,12,12 二、習題及答案 12.1 What is the advantage of using exception handling? 12.1使用異常處理的優勢是什么? 答:使用異常處理有以下優勢: 1. 提高…

C++ 模板類的示例-數組

類模板可以有非通用類型參數:1)通常是整型(C20標準可以用其它的類型);2)實例化模板時必須用常量表達式;3)模板中不能修改參數的值;4)可以為非通用類型參數提供…

Android中使用performClick觸發點擊事件

Android中使用performClick觸發點擊事件 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿!今天我們將探討在Android開發中如何使用 performClick() 方法來觸發點擊…

數據庫-python SQLite3

數據庫-python SQLite3 一:sqlite3 簡介二: sqlite3 流程1> demo2> sqlite3 流程 三:sqlite3 step1> create table2> insert into3> update4> select1. fetchall()2. fetchone()3. fetchmany() 5> delete6> other step 四&#…

Spark join數據傾斜調優

Spark中常見的兩種數據傾斜現象如下 stage部分task執行特別慢 一般情況下是某個task處理的數據量遠大于其他task處理的數據量,當然也不排除是程序代碼沒有冗余,異常數據導致程序運行異常。 作業重試多次某幾個task總會失敗 常見的退出碼143、53、137…

【電路筆記】-放大器類型

放大器類型 文章目錄 放大器類型1、概述2、關于偏置的注意事項3、A類(Class A)放大器4、B類(Class B)放大器5、AB類(Class AB)放大器6、C類(Class C)放大器7、總結1、概述 放大器通常根據輸出級的結構進行分類。 事實上,功率放大確實發生在該階段,因此輸出信號的質量和…

Arduino (esp ) 下String的內存釋放

在個人的開源項目 GitHub - StarCompute/tftziku: 這是一個通過單片機在各種屏幕上顯示中文的解決方案 中為了方便快速檢索使用了string,于是這個string在esp8266中占了40多k,原本以為當string設置為""的時候這個40k就可以回收,結果發覺不行…

【JS異步編程】async/await——用同步代碼寫異步

歷史小劇場 懂得暴力的人,是強壯的;懂得克制暴力的人,才是強大的。----《明朝那些事兒》 什么是 async/await async: 聲明一個異步函數 自動將常規函數轉換成Promise,返回值也是一個Promise對象;只有async函數內部的異…

Java SE入門及基礎(59) 線程的實現(上) 線程的創建方式 線程內存模型 線程安全

目錄 線程(上) 1. 線程的創建方式 Thread類常用構造方法 Thread類常用成員方法 Thread類常用靜態方法 示例 總結 2. 線程內存模型 3.線程安全 案例 代碼實現 執行結果 線程(上) 1. 線程的創建方式 An application t…

利用 Docker 簡化 Nacos 部署:快速搭建 Nacos 服務

利用 Docker 簡化 Nacos 部署:快速搭建 Nacos 服務 引言 在微服務架構中,服務注冊與發現是確保服務間通信順暢的關鍵組件。Nacos(Dynamic Naming and Configuration Service)作為阿里巴巴開源的一個服務發現和配置管理平臺&…

任務調度器——任務切換

一、開啟任務調度器 函數原型: void vTaskStartScheduler( void ) 作用:用于啟動任務調度器,任務調度器啟動后, FreeRTOS 便會開始進行任務調度 內部實現機制(以動態創建為例): &#xff0…

Linux 安裝、配置Tomcat 的HTTPS

Linux 安裝 、配置Tomcat的HTTPS 安裝Tomcat 這里選擇的是 tomcat 10.X ,需要Java 11及更高版本 下載頁 ->Binary Distributions ->Core->選擇 tar.gz包 下載、上傳到內網服務器 /opt 目錄tar -xzf 解壓將解壓的根目錄改名為 tomat-10 并移動到 /opt 下, 形成個人…

測評推薦:企業管理u盤的軟件有哪些?

U盤作為一種便攜的存儲設備,方便易用,被廣泛應用于企業辦公、個人學習及日常工作中。然而,U盤的使用也帶來了數據泄露、病毒傳播等安全隱患。為了解決這些問題,企業管理U盤的軟件應運而生。 本文將對市面上流行的幾款U盤管理軟件…

Hadoop3:Yarn容量調度器配置多隊列案例

一、情景描述 需求1: default隊列占總內存的40%,最大資源容量占總資源60%,hive隊列占總內存的60%,最大資源容量占總資源80%。 二、多隊列優點 (1)因為擔心員工不小心,寫遞歸死循環代碼&#…

數據處理:四選一、四關聯

今天去面試,面試官們給我一個‘選擇’,有四個選項:‘展示你的才華’、‘展示你的美貌’、‘展示你的才華與美貌’、‘都不展示’ {label: “選擇”,children: [{label: “展示你的才華”,children: [],isShow: talentModal,click: () > {i…

電路筆記(電源模塊): 基于FT2232HL實現的jtag下載器硬件+jtag的通信引腳說明

JTAG接口說明 JTAG 接口根據需求可以選擇20針或14針的配置,具體選擇取決于應用場景和需要連接的功能。比如之前的可編程邏輯器件XC9572XL使用JTAG引腳(TCK、TDI、TDO、TMS、VREF、GND)用于與器件進行調試和編程通信。更詳細的內容可以閱讀11…