pytorch基本運算-導數和f-string

引言

在前序對機器學習的探究過程中,我們已經深刻體會到人工智能到處都有微分求導運算,相關文章鏈接包括且不限于:
BP神經網絡
邏輯回歸
對于pytorch張量,求導運算必不可少,所以本次就專門來學習一下。

f-string的用法

f-string是python語言里面一種簡潔且強大的字符串格式化方法,對內容的引用和輸出較為高效。

確實也可以不適用f-string,但剛好學習到導數計算比較簡單,所以就一起學習一下。

f-string以“f”或“F”開頭,用單引號“‘”和“’”引用自由添加的字符串,如果要引用變量,就用大括號“{}”包起來。

常規輸出

常規輸出格式:f+‘輸出內容+{“引用內容”}’。示例代碼:

h = 0.1234567
print(f'h當前值:{h}')

?
這個代碼的運行效果:h當前值:0.1234567
在這里插入圖片描述

控制小數位數輸出

常規輸出格式:f+‘輸出內容+{“引用內容:.xf”}’。

“引用內容:.xf”的意思是,對浮點數f,保留x位小數。示例代碼:

h = 0.1234567
print(f'h當前值:{h}')
print(f'h當前值(1位小數):{h:.1f}')
print(f'h當前值(3位小數):{h:.3f}')
print(f'h當前值(5位小數):{h:.5f}')
print(f'h當前值(8位小數):{h:.8f}')
print(f'h當前值(10位小數):{h:.10f}')

在這里插入圖片描述
由圖2可見,h的當前值按照x的設置量調整了小數位數。

如果想把代碼寫得緊湊,比如寫成一個for循環,上述代碼可優化為:

h = 0.1234567
print(f'h當前值:{h}')
print(f'h當前值(1位小數):{h:.1f}')
print(f'h當前值(3位小數):{h:.3f}')
print(f'h當前值(5位小數):{h:.5f}')
print(f'h當前值(8位小數):{h:.8f}')
print(f'h當前值(10位小數):{h:.10f}')
for i in range(10):print(f'h當前值保留{i}位小數:{h:.{i}f}')

需要注意的是,引用的變量應該用大括號"{}"包起來。

代碼運行效果為:
在這里插入圖片描述

pytorch導數

計算導數的定義式為:
f ′ ( x ) = lim ? x → 0 f ( x + h ) ? f ( x ) h f^{'}(x)=\lim_{x \to 0}\frac{f(x+h)-f(x)}{h} f(x)=x0lim?hf(x+h)?f(x)?
基于此,繼續優化代碼:

h = 0.1234567
print(f'h當前值:{h}')
print(f'h當前值(1位小數):{h:.1f}')
print(f'h當前值(3位小數):{h:.3f}')
print(f'h當前值(5位小數):{h:.5f}')
print(f'h當前值(8位小數):{h:.8f}')
print(f'h當前值(10位小數):{h:.10f}')
for i in range(5):print(f'h當前值保留{i}位小數:{h:.{i}f}')# 定義原函數
def f(x):return 3*x**2-3*x# 定義求導函數
def numerical_lim(f, x, h):return (f(x + h) - f(x)) / h# 修改偏移量
h=0.1
for i in range(10):print(f'h={h:.5f}.時的函數值為{f(h):.5f},導數值為{numerical_lim(f,1,h):.8f}')h*=0.1

這里先定義了原函數:

def f(x):
return 3x**2-3x

然后定義了原函數的導數:

def numerical_lim(f, x, h):
return (f(x + h) - f(x)) / h

最后通過改變自變量偏移量的形式,不斷逼近導數的真實值:

h=0.1 for i in range(10):
print(f’h={h:.5f}.時的函數值為{f(h):.5f},導數值為{numerical_lim(f,1,h):.8f}')
h*=0.1

代碼運行后的效果為:
在這里插入圖片描述
可見,隨著偏移量的減小,在x=1位置處,函數f(x)的導數值不斷趨向準確值3。

細節說明

由于小數位數的限制,如果繼續減小h到h=0.000 000 000 000 000 100,函數f(x)的值和導數值都會變成0。
對此有兩種解釋:

  1. x此時本身是無窮小量,在f(x)=3x**2-3x中,極小的x計算了平方后,已經遠遠小于x本身,函數f(x)的值和導數值都是無窮小量,計算效果輸出0。
  2. Python 的 float 類型使用 IEEE 754 雙精度 64 位浮點數,提供約15-17位十進制有效數字,一旦超出就可能不準。h=0.000000000000000100的1出現在第16位,此時的計算結果就會出現不準。

可運行此時的代碼測試:

h = 0.1234567
print(f'h當前值:{h}')
print(f'h當前值(1位小數):{h:.1f}')
print(f'h當前值(3位小數):{h:.3f}')
print(f'h當前值(5位小數):{h:.5f}')
print(f'h當前值(8位小數):{h:.8f}')
print(f'h當前值(10位小數):{h:.10f}')
for i in range(5):print(f'h當前值保留{i}位小數:{h:.{i}f}')# 定義原函數
def f(x):return 3*x**2-3*x# 定義求導函數
def numerical_lim(f, x, h):return (f(x + h) - f(x)) / h# 修改偏移量
h=0.1
for i in range(20):print(f'i={i},h={h:.18f}.時的函數值為{f(h):.18f},導數值為{numerical_lim(f,1,h):.18f}')h*=0.1

在這里插入圖片描述

總結

學習了pytorch導數運算和相關的f-string使用方法。

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

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

相關文章

dvwa4——File Inclusion

LOW: 先隨便點開一個文件,可以觀察到url欄變成這樣,說明?page是dvwa當前關卡用來加載文件的參數 http://10.24.8.35/DVWA/vulnerabilities/fi/?pagefile1.php 我們查看源碼 ,沒有什么過濾,直接嘗試訪問其他文件 在url欄的pag…

經典面試題:一文了解常見的緩存問題

在面試過程中,面試官的桌子上擺放著很多高頻的面試題,能否順利回答決定了你面試通過的概率。其中緩存問題就是其中的一份,可以說掌握緩存問題及解決方法是面試前必須準備的內容。那么緩存有什么典型的問題,出現的原因是什么&#…

生產環境中安裝和配置 Nginx 以部署 Flask 應用的詳細指南

在生產環境中部署 Flask 應用時,Nginx 常被用作反向代理服務器,與 WSGI 服務器(如 Gunicorn)協同工作。Nginx 可以處理靜態文件、提供 SSL/TLS 加密、實現負載均衡等功能。本文將詳細介紹如何在 Ubuntu/Debian 系統上安裝 Nginx&a…

鴻蒙進階——Mindspore Lite AI框架源碼解讀之模型加載詳解(一)

文章大綱 引言一、模型加載概述二、核心數據結構三、模型加載核心流程 引言 Mindspore 是一款華為開發開源的AI推理框架,而Mindspore Lite則是華為為了適配在移動終端設備上運行專門定制的版本,使得我們可以在OpenHarmony快速實現模型加載和推理等功能&…

AI煉丹日志-24 - MCP 自動操作 提高模型上下文能力 Cursor + Sequential Thinking Server Memory

點一下關注吧!!!非常感謝!!持續更新!!! Java篇: MyBatis 更新完畢目前開始更新 Spring,一起深入淺出! 大數據篇 300: Hadoop&…

【仿muduo庫實現并發服務器】實現時間輪定時器

實現時間輪定時器 1.時間輪定時器原理2.項目中實現目的3.實現功能3.1構造定時任務類3.2構造時間輪定時器每秒鐘往后移動添加定時任務刷新定時任務取消定時任務 4.完整代碼 1.時間輪定時器原理 時間輪定時器的原理類似于時鐘,比如現在12點,定一個3點的鬧…

Windows10下搭建sftp服務器(附:詳細搭建過程、CMD連接測試、連接失敗問題分析解決等)

最終連接sftp效果 搭建sftp服務器 1、這里附上作者已找好的 freeSSHd安裝包 ,使用它進行搭建sftp服務器。 2、打開freeSSHd安裝包,進行安裝 (1)、選擇完全安裝 (2)、安裝完成后,對提示窗口選擇關閉 (3)、安裝完成后,提示是否安裝私有密鑰。我們選擇"是" (4)、安…

推薦幾個不錯的AI入門學習視頻

引言:昨天推薦了幾本AI入門書(AI入門書),反響還不錯。今天,我再推薦幾個不錯的AI學習視頻,希望對大家有幫助。 網上關于AI的學習視頻特別多。有收費的,也有免費的。我今天只推薦免費的。 我們按…

點擊啟動「高效模式」:大騰智能 CAD 重構研發設計生產力

在制造業數字化轉型浪潮中,設計工具的革新正成為企業突破效率瓶頸的關鍵。傳統CAD軟件因本地硬件依賴、協作壁壘高筑、復雜場景響應遲緩等問題,長期困擾設計團隊。 大騰智能CAD依托華為云底座、自研幾何引擎及AI技術深度融合,為制造行業各細…

cursor如何開啟自動運行模式

在Cursor中,開啟自動運行模式即啟用“Yolo Mode”,具體操作如下: 按下Ctrl Shift J(Windows/Linux)或Cmd Shift J(Mac)打開Cursor設置。導航到“Features”(功能)選…

Windows10-ltsc-2019 使用 PowerShell 安裝安裝TranslucentTB教程(不通過微軟商店安裝)

Windows10-ltsc-2019 使用 PowerShell 安裝安裝TranslucentTB教程(不通過微軟商店安裝) 下載 v2020.4(最后一個兼容 1809 的版本): TranslucentTB安裝包(下載不了上面有安裝包)安裝依賴項(如未安裝&#x…

分布式拜占庭容錯算法——實現工作量證明(PoW)算法詳解

Java 實現工作量證明(PoW)算法詳解 一、PoW 核心原理 #mermaid-svg-AAj0Pvst1PVcVy5v {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-AAj0Pvst1PVcVy5v .error-icon{fill:#552222;}#mermaid…

黑馬Java面試筆記之框架篇(Spring、SpringMvc、Springboot)

一. 單例bean Spring框架中的單例bean是線程安全的嗎? Spring框架中的bean是單例的,可以在注解Scope()進行設置 singleton:bean在每一個Spring IOC容器中只有一個實例。prototype:一個bean的定義可以有多個實例 總結 二. AOP AOP稱…

electron下載文件

const http require(http); const https require(https); const fs require(fs); const { URL } require(url); const path require(path);// 下載文件函數 function downloadFile(url, savePath) {return new Promise((resolve, reject) > {try {console.log(開始下載…

快速掌握 GO 之 RabbitMQ 結合 gin+gorm 案例

更多個人筆記見: (注意點擊“繼續”,而不是“發現新項目”) github個人筆記倉庫 https://github.com/ZHLOVEYY/IT_note gitee 個人筆記倉庫 https://gitee.com/harryhack/it_note 個人學習,學習過程中還會不斷補充&…

android FragmentManager 刪除所有Fragment 重建

在Android開發中,管理Fragment是一項常見任務,有時需要刪除所有Fragment并重新創建。這在某些場景下,例如用戶需要重置應用狀態或切換內容時,顯得尤為重要。本文將詳細介紹如何通過 FragmentManager刪除所有Fragment并重建。 一、…

ubuntu之開機自啟frpc

在 Ubuntu 系統中為 frpc 設置開機自啟(以 frpc -c frpc.toml 命令為例),可以通過 systemd 服務實現。以下是詳細步驟: 創建 systemd 服務文件 sudo vim /etc/systemd/system/frpc.service 寫入以下內容(根據你的路…

推薦一款PDF壓縮的工具

今天一位小伙伴找來,問我有沒有辦法將PDF變小的辦法。 詳細了解了一下使用場景: 小伙伴要在某系統上傳一個PDF文件,原文件是11.6MB,但是上傳時系統做了限制,只能上傳小于10MB的文件,如圖: 我聽…

JDK21深度解密 Day 11:云原生環境中的JDK21應用

【JDK21深度解密 Day 111】云原生環境中的JDK21應用 本文是《JDK21深度解密:從新特性到生產實踐的全棧指南》專欄的第11天內容,聚焦云原生環境中的JDK21應用。我們將深入探討如何在容器化、微服務、Serverless等云原生架構中充分發揮JDK21的技術優勢,提升Java應用的性能、穩…

Java-redis實現限時在線秒殺功能

1.使用redisson pom文件添加redisson <!--redisson--><dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.23.4</version></dependency> 2.mysql數據庫表設…