深度學習 精選筆記(2)自動求導與概率

學習參考:

  • 動手學深度學習2.0
  • Deep-Learning-with-TensorFlow-book
  • pytorchlightning

①如有冒犯、請聯系侵刪。
②已寫完的筆記文章會不定時一直修訂修改(刪、改、增),以達到集多方教程的精華于一文的目的。
③非常推薦上面(學習參考)的前兩個教程,在網上是開源免費的,寫的很棒,不管是開始學還是復習鞏固都很不錯的。

深度學習回顧,專欄內容來源多個書籍筆記、在線筆記、以及自己的感想、想法,佛系更新。爭取內容全面而不失重點。完結時間到了也會一直更新下去,已寫完的筆記文章會不定時一直修訂修改(刪、改、增),以達到集多方教程的精華于一文的目的。所有文章涉及的教程都會寫在開頭、一起學習一起進步。

1.導數基本含義

古希臘人把一個多邊形分成三角形,并把它們的面積相加,才找到計算多邊形面積的方法。 為了求出曲線形狀(比如圓)的面積,古希臘人在這樣的形狀上刻內接多邊形。 內接多邊形的等長邊越多,就越接近圓。 這個過程也被稱為逼近法(method of exhaustion)。
在這里插入圖片描述
事實上,逼近法就是積分(integral calculus)的起源。 2000多年后,微積分的另一支,微分(differential calculus)被發明出來。 在微分學最重要的應用是優化問題,即考慮如何把事情做到最好。

導數是微積分中的重要概念,它表示函數在某一點處的變化率。具體來說,如果一個函數表示某一物理量隨著時間、空間或其他自變量的變化,那么該函數在某一點的導數就表示該物理量在這一點的變化速率。換句話說,導數告訴函數在某一點處是增加還是減少,以及增加或減少的速率有多快。
在這里插入圖片描述
其中,?是一個無限接近于零的數。這個定義可以理解為,當 ? 趨近于零時,函數在點 x 處的導數就是函數在點 x 處的切線的斜率。

導數等價符號:
在這里插入圖片描述

繪制函數 𝑢=𝑓(𝑥) 及其在 𝑥=1處的切線 𝑦=2𝑥?3 ], 其中系數 2是切線的斜率:
在這里插入圖片描述

2.基本導數公式

在這里插入圖片描述

3.偏導數

深度學習中,函數通常依賴于許多變量。 因此,需要將微分的思想推廣到多元函數(multivariate function)上。

偏導數是多元函數的導數概念的推廣,它用于描述一個函數關于其中一個自變量的變化率,而將其他自變量視為常數。對于一個具有多個自變量的函數,其偏導數告訴我們,當其中一個自變量發生變化時,函數值的變化率是多少。
在這里插入圖片描述
詳細一點說明:
在這里插入圖片描述

4.梯度

可以連結一個多元函數對其所有變量的偏導數,以得到該函數的梯度(gradient)向量。梯度是一個向量,表示多元函數在給定點處的最大變化率和變化的方向。

函數 𝑓(𝐱) 相對于 𝐱 的梯度是一個包含 𝑛 個偏導數的向量:
在這里插入圖片描述

梯度告訴函數在某一點的變化率最快的方向。在二維空間中,梯度就是函數的偏導數構成的向量,指向函數增長最快的方向,其大小表示增長的速率。在三維空間中,梯度也是類似的概念,它是一個三維向量,指向函數增長最快的方向。

梯度在優化問題中非常有用,因為在最小化或最大化一個函數時,沿著梯度的方向函數值變化最快,可以幫助找到函數的極小值或極大值。

5.鏈式法則

在深度學習中,多元函數通常是復合(composite)的, 所以難以應用上述任何規則來微分這些函數。 幸運的是,鏈式法則可以被用來微分復合函數。
在這里插入圖片描述

6.自動微分

深度學習框架通過自動計算導數,即自動微分(automatic differentiation)來加快求導。 實際中,根據設計好的模型,系統會構建一個計算圖(computational graph), 來跟蹤計算是哪些數據通過哪些操作組合起來產生輸出。 自動微分使系統能夠隨后反向傳播梯度。 這里,反向傳播(backpropagate)意味著跟蹤整個計算圖,填充關于每個參數的偏導數。

自動計算微分的過程示例如下:

import tensorflow as tf# 變量x賦值初始值
x = tf.range(4, dtype=tf.float32)
# 存放梯度的變量,將x轉換為Variable張量,方便更新。
x = tf.Variable(x)
print(x)
# 把所有計算記錄在磁帶上
with tf.GradientTape() as t:# 計算y=計算x和x的點積y = 2 * tf.tensordot(x, x, axes=1)
# 調用磁帶的反向傳播函數自動計算y關于x的每個梯度
x_grad = t.gradient(y, x)
x_grad,y,x
<tf.Variable 'Variable:0' shape=(4,) dtype=float32, numpy=array([0., 1., 2., 3.], dtype=float32)>
(<tf.Tensor: shape=(4,), dtype=float32, numpy=array([ 0.,  4.,  8., 12.], dtype=float32)>,<tf.Tensor: shape=(), dtype=float32, numpy=28.0>,<tf.Variable 'Variable:0' shape=(4,) dtype=float32, numpy=array([0., 1., 2., 3.], dtype=float32)>)

6.1非標量變量的反向傳播

當y不是標量時,向量y關于向量x的導數的最自然解釋是一個矩陣。 對于高階和高維的y和x,求導的結果可以是一個高階張量。

然而,雖然這些更奇特的對象確實出現在高級機器學習中(包括[深度學習中]), 但當調用向量的反向計算時,我們通常會試圖計算一批訓練樣本中每個組成部分的損失函數的導數。

# 變量x賦值初始值
x = tf.range(4, dtype=tf.float32)
# 存放梯度的變量,將x轉換為Variable張量,方便更新。
x = tf.Variable(x)
print(x)
with tf.GradientTape() as t:y = x * x
t.gradient(y, x)  # 等價于y=tf.reduce_sum(x*x)

6.2分離計算

有時,希望將某些計算移動到記錄的計算圖之外。 例如,假設y是作為x的函數計算的,而z則是作為y和x的函數計算的。 想計算z關于x的梯度,但由于某種原因,希望將y視為一個常數, 并且只考慮到x在y被計算后發揮的作用。

這里可以分離y來返回一個新變量u,該變量與y具有相同的值, 但丟棄計算圖中如何計算y的任何信息。 換句話說,梯度不會向后流經u到x。 因此,下面的反向傳播函數計算z=ux關于x的偏導數,同時將u作為常數處理, 而不是z=xx*x關于x的偏導數。

# 變量x賦值初始值
x = tf.range(4, dtype=tf.float32)
# 存放梯度的變量,將x轉換為Variable張量,方便更新。
x = tf.Variable(x)
print(x)
# 設置persistent=True來運行t.gradient多次
with tf.GradientTape(persistent=True) as t:y = x * xu = tf.stop_gradient(y)z = u * xx_grad = t.gradient(z, x)
print(x_grad)
x_grad == u
<tf.Variable 'Variable:0' shape=(4,) dtype=float32, numpy=array([0., 1., 2., 3.], dtype=float32)>
tf.Tensor([0. 1. 4. 9.], shape=(4,), dtype=float32)
<tf.Tensor: shape=(4,), dtype=bool, numpy=array([ True,  True,  True,  True])>

由于記錄了y的計算結果,可以隨后在y上調用反向傳播, 得到y=x*x關于的x的導數結果查看或者用作其它用途:

t.gradient(y, x)
<tf.Tensor: shape=(4,), dtype=float32, numpy=array([0., 2., 4., 6.], dtype=float32)>

6.3控制流的梯度計算

即使構建函數的計算圖需要通過Python控制流(例如,條件、循環或任意函數調用),仍然可以計算得到的變量的梯度:

def f(a):b = a * 2while tf.norm(b) < 1000:b = b * 2if tf.reduce_sum(b) > 0:c = belse:c = 100 * breturn ca = tf.Variable(tf.random.normal(shape=()))
print(a)
with tf.GradientTape() as t:d = f(a)
d_grad = t.gradient(d, a)
print(d)
d_grad

7.概率

概率是描述隨機事件發生可能性的量度。在數學上,概率通常用一個介于 0 到 1 之間的實數來表示,其中 0 表示不可能事件,1 表示必然事件。例如,擲一枚公正硬幣出現正面的概率為 0.5,即 50% 的可能性。

概率可以通過頻率或基于理論模型來確定。頻率概率是通過觀察事件發生的次數來計算的,當試驗次數趨于無窮時,頻率概率會趨近于一個固定值。理論概率是基于事件的可能性和相關因素來計算的,常用的方法包括古典概率、幾何概率和條件概率等。
概率可以分為幾種不同的類型,主要包括以下幾種:

  • 古典概率:也稱為等可能概率,指的是在有限個等可能結果的隨機試驗中,某個事件發生的概率等于該事件發生的可能性除以總的可能性個數。例如,擲一個公正骰子,出現任意一個點數的概率為1/6。
  • 幾何概率:幾何概率是指根據幾何形狀和尺寸計算概率的方法,通常用于連續型隨機變量。例如,在一個正方形區域內隨機拋一點,落在某個子區域內的概率與該子區域的面積成正比。
  • 條件概率:條件概率是指在給定某個條件下事件發生的概率。如果事件 A 和事件 B 都是隨機事件,且事件 B 的概率大于 0,則事件 A在事件 B 已經發生的條件下發生的概率稱為事件 A 在事件 B 條件下的概率,記作 P(A|B)。
  • 貝葉斯概率:貝葉斯概率是指根據先驗概率和新的證據來計算更新后的概率,常用于統計推斷和機器學習中。
  • 頻率概率:頻率概率是指根據大量重復實驗中事件發生的相對頻率來計算概率的方法。例如,擲一枚硬幣出現正面的概率可以通過大量重復擲硬幣實驗來估計。

把從概率分布中抽取樣本的過程稱為抽樣(sampling)。 籠統來說,可以把分布(distribution)看作對事件的概率分配。 將概率分配給一些離散選擇的分布稱為多項分布(multinomial distribution)。

7.1基本概率論

檢查骰子的唯一方法是多次投擲并記錄結果, 對于每個骰子,我們將觀察到 {1,…,6} 中的一個值。 對于每個值,一種自然的方法是將它出現的次數除以投擲的總次數, 即此事件(event)概率的估計值。 大數定律(law of large numbers)告訴我們: 隨著投擲次數的增加,這個估計值會越來越接近真實的潛在概率。

%matplotlib inline
import numpy as np
import tensorflow as tf
import tensorflow_probability as tfp
from d2l import tensorflow as d2lfair_probs = tf.ones(6) / 6
counts = tfp.distributions.Multinomial(10, fair_probs).sample(500)
cum_counts = tf.cumsum(counts, axis=0)
estimates = cum_counts / tf.reduce_sum(cum_counts, axis=1, keepdims=True)d2l.set_figsize((6, 4.5))
for i in range(6):d2l.plt.plot(estimates[:, i].numpy(),label=("P(die=" + str(i + 1) + ")"))
d2l.plt.axhline(y=0.167, color='black', linestyle='dashed')
d2l.plt.gca().set_xlabel('Groups of experiments')
d2l.plt.gca().set_ylabel('Estimated probability')
d2l.plt.legend();

在這里插入圖片描述
每條實線對應于骰子的6個值中的一個,并給出骰子在每組實驗后出現值的估計概率。 當我們通過更多的實驗獲得更多的數據時,這 6條實體曲線向真實概率收斂。

對骰子進行采樣,可以模擬1000次投擲。 然后,可以統計1000次投擲后,每個數字被投中了多少次。 具體來說,計算相對頻率,以作為真實概率的估計。

counts = tfp.distributions.Multinomial(1000, fair_probs).sample()
counts / 1000
<tf.Tensor: shape=(6,), dtype=float32, numpy=array([0.167, 0.175, 0.143, 0.164, 0.182, 0.169], dtype=float32)>

因為是從一個公平的骰子中生成的數據,每個結果都有真實的概率 1/6 , 大約是 0.167 ,所以上面輸出的估計值看起來不錯。這也反映了大數定律的有效性。

概率論公理
在處理骰子擲出時,我們將集合 S={1,2,3,4,5,6} 稱為樣本空間(sample space)或結果空間(outcome space), 其中每個元素都是結果(outcome)。 事件(event)是一組給定樣本空間的隨機結果。
概率(probability)可以被認為是將集合映射到真實值的函數。 在給定的樣本空間 S 中,事件 A 的概率, 表示為 𝑃(A) ,滿足以下屬性:
在這里插入圖片描述
隨機變量
在概率論和統計學中,隨機變量是一個用來描述隨機現象結果的變量,它可以取多個可能的取值,每個取值對應著一種可能的結果。隨機變量可以是離散的,也可以是連續的。

  • 離散隨機變量:離散隨機變量的取值是可數的,通常是整數。例如,拋一次硬幣正面出現的次數就是一個離散隨機變量,可能的取值為 0 或 1。
  • 連續隨機變量:連續隨機變量的取值是在一個區間內的實數,取值是不可數的。例如,一個人身高就是一個連續隨機變量,可以在某個范圍內取任意實數值。

請注意,離散(discrete)隨機變量(如骰子的每一面) 和連續(continuous)隨機變量(如人的體重和身高)之間存在微妙的區別。 現實生活中,測量兩個人是否具有完全相同的身高沒有太大意義。 如果我們進行足夠精確的測量,最終會發現這個星球上沒有兩個人具有完全相同的身高。 在這種情況下,詢問某人的身高是否落入給定的區間,比如是否在1.79米和1.81米之間更有意義。 在這些情況下,我們將這個看到某個數值的可能性量化為密度(density)。 高度恰好為1.80米的概率為0,但密度不是0。 在任何兩個不同高度之間的區間,我們都有非零的概率。

7.2處理多個隨機變量

很多時候,會考慮多個隨機變量。 比如,可能需要對疾病和癥狀之間的關系進行建模。 給定一個疾病和一個癥狀,比如“流感”和“咳嗽”,以某個概率存在或不存在于某個患者身上。 需要估計這些概率以及概率之間的關系,以便可以運用推斷來實現更好的醫療服務。

(1)聯合概率

聯合概率(joint probability) 𝑃(𝐴=𝑎,𝐵=𝑏)。 給定任意值 𝑎 和 𝑏 ,聯合概率可以回答: 𝐴=𝑎 和 𝐵=𝑏 同時滿足的概率是多少? 請注意,對于任何 𝑎 和 𝑏 的取值, 𝑃(𝐴=𝑎,𝐵=𝑏)≤𝑃(𝐴=𝑎)。 這點是確定的,因為要同時發生 𝐴=𝑎 和 𝐵=𝑏 , 𝐴=𝑎 就必須發生, 𝐵=𝑏 也必須發生(反之亦然)。因此, 𝐴=𝑎 和 𝐵=𝑏同時發生的可能性不大于 𝐴=𝑎 或是 𝐵=𝑏 單獨發生的可能性。

(2)條件概率

聯合概率的不等式帶來一個有趣的比率: 0≤𝑃(𝐴=𝑎,𝐵=𝑏)𝑃(𝐴=𝑎)≤1 。 我們稱這個比率為條件概率(conditional probability), 并用 𝑃(𝐵=𝑏∣𝐴=𝑎) 表示它:它是 𝐵=𝑏 的概率,前提是 𝐴=𝑎已發生。

(3)貝葉斯定理

使用條件概率的定義,我們可以得出統計學中最有用的方程之一: Bayes定理(Bayes’ theorem)。 根據乘法法則(multiplication rule )可得到 𝑃(𝐴,𝐵)=𝑃(𝐵∣𝐴)𝑃(𝐴) 。 根據對稱性,可得到 𝑃(𝐴,𝐵)=𝑃(𝐴∣𝐵)𝑃(𝐵) 。 假設 𝑃(𝐵)>0,求解其中一個條件變量,得到:

在這里插入圖片描述
請注意,這里使用緊湊的表示法: 其中 𝑃(𝐴,𝐵) 是一個聯合分布(joint distribution), 𝑃(𝐴∣𝐵)
是一個條件分布(conditional distribution)。 這種分布可以在給定值 𝐴=𝑎,𝐵=𝑏 上進行求值。

(4)邊際化(邊際概率)

為了能進行事件概率求和,需要求和法則(sum rule), 即 𝐵 的概率相當于計算 𝐴 的所有可能選擇,并將所有選擇的聯合概率聚合在一起,這也稱為邊際化(marginalization)。 邊際化結果的概率或分布稱為邊際概率(marginal probability) 或邊際分布(marginal distribution)。:
在這里插入圖片描述

(5)獨立性

依賴(dependence)與獨立(independence)。 如果兩個隨機變量 𝐴 和 𝐵 是獨立的,意味著事件 𝐴
的發生跟 𝐵 事件的發生無關。 在這種情況下,統計學家通常將這一點表述為 𝐴⊥𝐵 。 根據貝葉斯定理,馬上就能同樣得到 𝑃(𝐴∣𝐵)=𝑃(𝐴) 。在所有其他情況下,我們稱 𝐴 和 𝐵 依賴。 比如,兩次連續拋出一個骰子的事件是相互獨立的。 相比之下,燈開關的位置和房間的亮度并不是依賴關系(因為可能存在燈泡壞掉、電源故障,或者開關故障)。

7.3期望與方差

為了概括概率分布的關鍵特征,需要一些測量方法。 一個隨機變量 𝑋的期望(expectation,或平均值(average))表示為
在這里插入圖片描述

當函數 𝑓(𝑥) 的輸入是從分布 𝑃 中抽取的隨機變量時, 𝑓(𝑥) 的期望值為
在這里插入圖片描述
在許多情況下,希望衡量隨機變量 𝑋 與其期望值的偏置。這可以通過方差來量化
在這里插入圖片描述
方差的平方根被稱為標準差(standard deviation)。 隨機變量函數的方差衡量的是:當從該隨機變量分布中采樣不同值 𝑥時, 函數值偏離該函數的期望的程度:
在這里插入圖片描述

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

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

相關文章

Linux系統——LAMP架構

目錄 一、LAMP架構組成 1.LAMP定義 2.各組件的主要作用 3.CGI和FastCGI 3.1CGI 3.3CGI和FastCGI比較 4.PHP 4.1PHP簡介 4.2PHP的Opcode語言 4.3PHP設置 二、LAMP架構實現 1.編譯安裝Apache httpd服務 2.編譯安裝Mysql 3.編譯安裝PHP 4.安裝論壇 5.搭建博客 W…

Linux編程 2.4 文件和目錄-Linux文件系統結構

1、文件操作基本元素 文件操作相關的最基本元素是&#xff1a;目錄結構、索引節點和文件的數據本身。 目錄結構&#xff08;目錄項&#xff09;索引節點&#xff08;i節點&#xff09;文件的數據 2、文件系統的三個區域 屬性&#xff1a; 超級塊&#xff1a;存放文件系統本身…

vs code快捷鍵

ShiftCtrlO vs code 提供很強大的功能&#xff0c;就是可以快速查文件中的符號列表和函數列表&#xff0c;我們首先打開一個源碼文件&#xff0c;比tcp.c&#xff0c;然后我們通過快捷鍵“ShiftCtrlO”即可打開對應源碼文件的符號列表和函數列表&#xff0c;通過查看這些列表&a…

【學習心得】Python調用JS的三種常用方法

在做JS逆向的時候&#xff0c;一種情況是直接用Python代碼復現JS代碼的功能&#xff0c;達成目的。但很多時候這種方法有明顯的缺點&#xff0c;那就是一旦JS代碼邏輯發生了更改&#xff0c;你就得重寫Python的代碼邏輯非常不便。于是第二種情況就出現了&#xff0c;我直接得到…

python自動化管理和zabbix監控網絡設備(防火墻和python自動化配置部分)

目錄 前言 一、ssh配置 1.FW1 2.core-sw1 3.core-sw2 二、python自動化配置防火墻 三、驗證DNAT 四、驗證DNAT 前言 視頻演示請訪問b站主頁 白帽小丑的個人空間-白帽小丑個人主頁-嗶哩嗶哩視頻 一、ssh配置 給需要自動化管理的設備配置ssh服務端用戶名和密碼 1.FW1 …

純css實現-讓字符串在文字少時顯示為居中對齊,而在文字多時顯示為左對齊

純css實現-讓字符串在文字少時顯示為居中對齊&#xff0c;而在文字多時顯示為左對齊 使用flex實現 思路 容器樣式&#xff08;.container&#xff09;: Flex容器的BFC性質使得其內部的子元素&#xff08;.text-box&#xff09;在水平方向上能夠居中&#xff0c;通過justify-c…

生態環境數據分析新篇章:Meta分析、R語言、Matlab、貝葉斯、結構方程模型等的前沿實踐

目錄 ①Meta分析在生態環境領域里的應用 ②R語言在生態環境領域中的應用 ③MATLAB在生態環境數據處理與分析中的應用 ④基于R語言piecewiseSEM結構方程模型在生態環境應用 ⑤R語言貝葉斯方法在生態環境領域中的高階技術應用 更多應用 為了Meta分析問題的設計、基礎理論、…

【菜鳥入門!】Matlab零基礎快速入門教程

數學建模競賽中&#xff0c;編程軟件是必不可缺少的&#xff0c;比如大家都熟知的MATLAB多數同學們都會經常用到&#xff0c;今天給大家介紹一些MATLAB的基本元素&#xff0c;希望幫助大家更好的掌握編寫基本的函數&#xff01; 變量和數組 MATLAB 程序的基本數據單元是數組。一…

rm刪除未釋放空間,linux sync有時不起作用

此時需要重啟系統即可. Linux中的sync命令用于將文件系統的緩沖區數據立即寫入磁盤&#xff0c;以確保數據的持久性。123456 sync命令沒有任何選項&#xff0c;簡單執行即可。它會將文件系統緩沖區中的數據寫入磁盤&#xff0c;并更新文件系統的超級塊及其他元數據。使用sync命…

Vue.js的雙向綁定原理

Vue的雙向綁定 vue雙向綁定是其最重要的核心亮點&#xff0c;其原理也很簡單&#xff0c;這里做個簡單總結 vue2的雙向綁定是利用的Object.definePropertyvue3的雙向綁定是利用的 ES6Porxy中的defineProperty(target, propKey, propDesc 其作用類似于Object.defineProperty …

您想要擁有 Apple Vision Pro 的原因

自從2024年2月2日Apple Vision Pro發布以來&#xff0c;網上已經有很多關于如何使用這款蘋果最新設備的示例。該平臺引入的空間計算新世界能夠完成許多在其他設備上無法完成的事情。Reddit 上的這個人能夠以 51202160 的分辨率從他的 PC 上串流游戲&#xff01;在本文中&#x…

SpringMVC01、回顧MVC

1、回顧MVC 1.1、什么是MVC MVC是模型(Model)、視圖(View)、控制器(Controller)的簡寫&#xff0c;是一種軟件設計規范。是將業務邏輯、數據、顯示分離的方法來組織代碼。MVC主要作用是降低了視圖與業務邏輯間的雙向偶合。MVC不是一種設計模式&#xff0c;MVC是一種架構模式。…

Docker部署前后端服務示例

使用Docker部署js前端 1.創建Dockerfile 在項目跟目錄下創建Dockerfile文件&#xff1a; # 使用nginx作為基礎鏡像 FROM nginx:1.19.1# 指定工作空間 WORKDIR /data/web# 將 yarn build 打包后的build文件夾添加到工作空間 ADD build build# 將項目必要文件添加到工作空間&a…

數據結構—>帶你深入了解單鏈表(基礎篇)

?作者簡介&#xff1a;大家好&#xff0c;我是橘橙黃又青&#xff0c;一個想要與大家共同進步的男人&#x1f609;&#x1f609; &#x1f34e;個人主頁&#xff1a;橘橙黃又青-CSDN博客 前面我們學習了順序表&#xff0c;今天我們來學習與順序表類似的單鏈表 1.&#x1f3…

鴻蒙Harmony應用開發—ArkTS聲明式開發(通用屬性:透明度設置)

設置組件的透明度。 說明&#xff1a; 從API Version 7開始支持。后續版本如有新增內容&#xff0c;則采用上角標單獨標記該內容的起始版本。 opacity opacity(value: number | Resource) 設置組件的不透明度。 卡片能力&#xff1a; 從API version 9開始&#xff0c;該接口…

香橙派AIpro快速上手指南

1 前言 作為業界首款基于昇騰深度研發的AI開發板&#xff0c;Orange Pi AIpro無論在外觀上、性能上還是技術服務支持上都非常優秀&#xff0c;其8/20TOPS澎湃算力是目前開發板市場中所具備的最大算力&#xff0c;能覆蓋生態開發板者的主流應用場景&#xff0c;讓用戶實踐各種創…

深入理解Redis中的漸進式Rehash技術

1. 引言 Redis是一款高性能的鍵值存儲系統,被廣泛應用于緩存、隊列、計數器等場景,因其快速、穩定的特性備受開發者青睞。在Redis的背后,有著許多復雜的數據結構和算法支撐著其高效運行,而其中之一就是Rehash操作。 Rehash是Redis中的一個關鍵操作,負責在數據量增加時對…

Web自動化測試平臺開發---Automated_platform

一、項目簡介 歷時一個假期&#xff0c;Automated_platform 第一版完工&#xff0c;是一款基于po模式的自動化測試平臺,采用后端技術為DjangoceleryRabbitMQmysql 配置mysql數據庫&#xff0c;進行數據遷移后&#xff0c;運行項目后&#xff0c;即可成功訪問http://127.0.0.1:8…

5. 升級 Spring Boot(Upgrading Spring Boot)

5. 升級 Spring Boot&#xff08;Upgrading Spring Boot&#xff09; 項目 wiki 提供如何從 Spring Boot 早期版本升級的說明。請按照 release notes 部分查找要升級到的版本。 升級說明總是版本說明的第一部分。如果您的版本落后一個以上&#xff0c;請確保您已經查看了所跳…

【軟考】數據結構之隊列和棧

目錄 1.例題一1.1題目1.2 題目截圖1.3 題目分析 1.例題一 1.1題目 輸出受限的雙端隊列是指元素可以從隊列的兩端輸入&#xff0c;但只能從隊列的一端輸出&#xff0c;如下圖所示&#xff0c;若有e1&#xff0c;e2&#xff0c;e3&#xff0c;e4依次進入輸出受限的雙端隊列&…