《昇思25天學習打卡營第07天|函數式自動微分》

函數式自動微分

環境配置

# 實驗環境已經預裝了mindspore==2.2.14,如需更換mindspore版本,可更改下面mindspore的版本號
!pip uninstall mindspore -y
!pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore==2.2.14
import numpy as np
import mindspore
from mindspore import nn
from mindspore import ops
from mindspore import Tensor, Parameter

函數與計算圖

  • w x + b = z wx + b = z wx+b=z
    -> A c t i v a t i o n ? F u n c t i o n ( z ) Activation - Function(z) Activation?Function(z)
    -> y p r e d y_{pred} ypred?
    -> C r o s s ? E n t r o p y ( y , y p r e d ) Cross - Entropy(y , y_{pred}) Cross?Entropy(y,ypred?)

  • w , b 為需要優化的參數 w,b為需要優化的參數 w,b為需要優化的參數

    x = ops.ones(5, mindspore.float32) # input tensor
    y = ops.zones(3, mindspore.float32) # expected output
    w = Parameter(Tensor(np.random.randn(5, 3), mindspore.float32), name = 'w')
    b = Parameter(Tensor(np.random.randn(3,), mindspore.float32), name='b') # biasdef function(x, y, w, b):z = ops.matmul(x, w) + bloss = ops.binary_cross_entropy_with_logits(z, y, ops.ones_like(z), ops.ones_like(z))return lossloss = function(x, y, w, b)
    print(loss)
    #output Tensor(shape=[], dtype=Float32, value= 0.914285)
    

微分函數與梯度計算

  • 為優化模型需要求參數對loss的導數 ? l o s s ? w \frac{\partial loss}{\partial w} ?w?loss?, ? l o s s ? b \frac{\partial loss}{\partial b} ?b?loss?
  • 調用mindspore.grad函數獲取function的微分函數
  • fn: 待求導函數
  • grad_position: 指定求導輸入位置索引
  • 使用grad獲得微分函數是一種函數變換,即輸入為函數,輸出也為函數
grad_fn = mindspore.grad(function, (2, 3))
grads = grad_fn(x, y, w, b)
print(grads)
#Output (Tensor(shape=[5, 3], dtype=Float32, value= [[ 6.56869709e-02,  5.37334494e-02,  3.01467031e-01], [ 6.56869709e-02,  5.37334494e-02,  3.01467031e-01], [ 6.56869709e-02,  5.37334494e-02,  3.01467031e-01], [ 6.56869709e-02,  5.37334494e-02,  3.01467031e-01], [ 6.56869709e-02,  5.37334494e-02,  3.01467031e-01]]), Tensor(shape=[3], dtype=Float32, value= [ 6.56869709e-02,  5.37334494e-02,  3.01467031e-01]))

Stop Gradient

  • 實現對某個輸出項的梯度截斷,或消除某個Tensor對梯度的影響
def function_with_logits(x, y, w, b):z = ops.matmul(x, w) + bloss = ops.binary_cross_entropy_with_logits(z, y, ops.ones_like(z), ops.ones_like(z))return loss, z
grad_fn = mindspore.grad(function_with_logits, (2, 3))
grads = grad_fn(x, y, w, b)
# 若想屏蔽掉z對梯度的影響,使用ops.stop_gradient接口, 將梯度在此截斷def function_stop_gradient(x, y, w, b):z = ops.matmul(x, w) + bloss = ops.binary_cross_entropy_with_logits(z, y, ops.ones_like(z), ops.ones_like(z))return loss, ops.stop_gradient(z)grad_fn = mindspore.grad(function_stop_gradient, (2, 3))
grads = grad_fn(x, y, w, b)

Auxiliary data

  • Auxiliary data為輔助數據,是函數除第一個輸出項外的其他輸出。
  • gradvalue_and_grad提供has_aux參數,當其設置為True時,可以自動實現前文手動添加stop_gradient的功能。
grad_fn = mindspore.grad(function_with_logits, (2, 3), has_aux=True)
grads, (z,) = grad_fn(x, y, w, b)

神經網絡梯度計算

#定義模型
class Network(nn.Cell):def __init__(self):super().__init__()self.w = wself.b = bdef construct(self, x):z = ops.matmul(x, self.w) + self.breturn z
# 實例化模型
model = Network()
# 實例化損失函數
loss_fn = nn.BCEWithLogitsLoss()
# 定義正向傳播
def forward_fn(x, y):z = model(x)loss = loss_fn(z, y)return loss
grad_fn = mindspore.value_and_grad(forward_fn, None, weights=model.trainable_params())
loss, grads = grad_fn(x, y)

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

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

相關文章

Windows10錄屏,教你3個方法,簡單快速錄屏

“我的電腦系統是Windows10的系統,今晚要進行線上開會,但我實在有事沒辦法參加會議,想把會議的內容錄制下來方便我后續觀看。但卻找不到電腦錄屏功能在哪里打開?求助一下,誰能幫幫我?” 在數字化時代&…

mysql 命令 —— 查看表信息(show table status)

查詢表信息,如整個表的數據量大小、表的索引占用空間大小等 1、查詢某個庫下面的所有表信息: SHOW TABLE STATUS FROM your_database_name;2、查詢指定的表信息: SHOW TABLE STATUS LIKE your_table_name;如:Data_length 顯示表…

閑聊 .NET Standard

前言 有時候,我們從 Nuget 下載第三方包時,會看到這些包的依賴除了要求 .NET FrameWork、.NET Core 等的版本之外,還會要求 .NET Standard 的版本,比如這樣: 這個神秘的 .NET Standard 是什么呢? .NET St…

【算法】字母異位詞分組

題目:字母異位詞分組 給你一個字符串數組,請你將 字母異位詞 組合在一起。可以按任意順序返回結果列表。 字母異位詞 是由重新排列源單詞的所有字母得到的一個新單詞。 示例 1: 輸入: strs [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] …

從零開始搭建spring boot多模塊項目

一、搭建父級模塊 1、打開idea,選擇file–new–project 2、選擇Spring Initializr,選擇相關java版本,點擊“Next” 3、填寫父級模塊信息 選擇/填寫group、artifact、type、language、packaging(后面需要修改)、java version(后面需要修改成和第2步中版本一致)。點擊“…

【0300】Postgres內核動態哈希表實現機制(1)

相關文章: 【0299】Postgres內核之哈希表(Hash Tables) 0 概述 在【0299】Postgres內核之哈希表(Hash Tables)一文中,講解了哈希表的作用、實現、優缺點等特性。本文開始,將詳細分析Postgres內…

MySQL之應用層優化(三)

應用層優化 應用層緩存 2.本地共享內存緩存 這種緩存一般是中等大小(幾個GB),快速,難以在多臺機器間同步。它們對小型的半靜態位數據比較合適。例如每個州的城市列表,分片數據存儲的分區函數(映射表),或者使用存活時間(TTL)策略…

記錄一次Chrome瀏覽器自動排序ajax請求的JSON數據問題

文章目錄 1.前言2. 為什么會這樣?3.如何解決? 1.前言 作者作為新人入職的第一天,mentor給了一個維護公司運營平臺的小需求,具體需求是根據運營平臺的某個管理模塊所展示記錄的某些字段對展示記錄做排序。 第一步: myb…

工業觸摸一體機優化MES應用開發流程

工業觸摸一體機在現代工業生產中扮演著至關重要的角色,它集成了智能觸摸屏和工業計算機的功能,廣泛應用于各種生產場景中。而制造執行系統(MES)作為工業生產管理的重要工具,對于提高生產效率、降低成本、優化資源利用具…

力扣hot100-普通數組

文章目錄 題目:最大子數組和方法1 動態規劃方法2 題目:合并區間題解 題目:最大子數組和 原題鏈接:最大子數組和 方法1 動態規劃 public class T53 {//動態規劃public static int maxSubArray(int[] nums) {if (nums.length 0…

C++基礎知識-編譯相關

記錄C語言相關的基礎知識 1 C源碼到可執行文件的四個階段 預處理(.i)、編譯(.s)、匯編(.obj)、鏈接。 1.1 預處理 預處理階段,主要完成宏替換、文件展開、注釋刪除、條件編譯展開、添加行號和文件名標識,輸出.i/.ii預處理文件。 宏替換,…

【UML用戶指南】-26-對高級行為建模-狀態圖

目錄 1、概念 2、組成結構 3、一般用法 4、常用建模技術 4.1、對反應型對象建模 一個狀態圖顯示了一個狀態機。在為對象的生命期建模中 活動圖展示的是跨過不同的對象從活動到活動的控制流 狀態圖展示的是單個對象內從狀態到狀態的控制流。 在UML中,用狀態圖…

tcpdump命令詳解及使用實例

1、抓所有網卡數據包,保存到指定路徑 tcpdump -i any -w /oemdata/123.pcap&一、tcpdump簡介 tcpdump可以將網絡中傳送的數據包完全截獲下來提供分析。它支持針對網絡層、協議、主機、網絡或端口的過濾,并提供and、or、not等邏輯語句來去掉無用的信…

【Python】已解決:SyntaxError: positional argument follows keyword argument

文章目錄 一、分析問題背景二、可能出錯的原因三、錯誤代碼示例四、正確代碼示例五、注意事項 已解決:SyntaxError: positional argument follows keyword argument 一、分析問題背景 在Python編程中,當我們在調用函數時混合使用位置參數(p…

RabbitMQ進階篇

文章目錄 發送者的可靠性生產者重試機制實現生產者確認 MQ的可靠性數據持久化交換機持久化隊列持久化消息持久化 Lazy Queue(可配置~)控制臺配置Lazy模式代碼配置Lazy模式更新已有隊列為lazy模式 消費者的可靠性消費者確認機制失敗重試機制失敗處理策略 業務冪等性唯一消息ID業…

西部智慧健身小程序+華為運動健康服務

1、 應用介紹 西部智慧健身小程序為用戶提供一站式全流程科學健身綜合服務。用戶通過登錄微信小程序,可享用健康篩查、運動風險評估、體質檢測評估、運動處方推送、個人運動數據監控與評估等公益服務。 2、 體驗介紹西部智慧健身小程序華為運動健康服務核心體驗如…

idea xml ctrl+/ 注釋格式不對齊

處理前 處理后 解決辦法 取消這兩個勾選

核方法總結(三)———核主成分(kernel PCA)學習筆記

一、核主成分 1.1 和PCA的區別 PCA (主成分分析)對應一個線性高斯模型(參考書的第二章),其基本假設是數據由一個符合正態分布的隱變量通過一個線性映射得到,因此可很好描述符合高斯分布的數據。然而在很多實…

ViewBinding的使用(因為kotlin-android-extensions插件的淘汰)

書籍: 《第一行代碼 Android》第三版 開發環境: Android Studio Jellyfish | 2023.3.1 問題: 3.2.4在Activity中使用Toast章節中使用到了kotlin-android-extensions插件,但是該插件已經淘汰,根據網上了解,目前使用了新的技術VewBinding替…

UE4_材質_材質節點_DepthFade

一、DepthFade參數 DepthFade(深度消退)表達式用來隱藏半透明對象與不透明對象相交時出現的不美觀接縫。 項目說明屬性消退距離(Fade Distance)這是應該發生消退的全局空間距離。未連接 FadeDistance(FadeDistance&a…