千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁  >  技術(shù)干貨  > torch.add函數(shù)詳解

torch.add函數(shù)詳解

來源:千鋒教育
發(fā)布人:xqq
時(shí)間: 2023-11-22 21:28:23 1700659703

一、torch.add()介紹

torch.add是PyTorch中重要的數(shù)學(xué)函數(shù)之一,該函數(shù)用于將兩個(gè)張量的元素相加。使用add可以用于在模型的正向傳播過程中將兩個(gè)數(shù)的值相加,也可以用于在訓(xùn)練過程中實(shí)現(xiàn)復(fù)雜的優(yōu)化算法。

add函數(shù)具有幾個(gè)參數(shù):input,other,alpha,out。其中,input和other都是兩個(gè)張量,需要進(jìn)行相加處理,alpha是一個(gè)系數(shù),可以給input和other分別乘以不同的值。out是一個(gè)輸出張量,可以將計(jì)算結(jié)果輸出到該張量中,以避免額外的內(nèi)存分配。


import torch

t1 = torch.randn((2, 3), dtype=torch.float32)
t2 = torch.randn((2, 3), dtype=torch.float32)

t3 = torch.add(t1, t2)
print(t3)

二、torch.add()的操作

1. 對標(biāo)量的操作

對兩個(gè)標(biāo)量進(jìn)行相加。當(dāng)輸入?yún)?shù)是標(biāo)量時(shí),add函數(shù)會(huì)將該值分別加到輸入張量的每一個(gè)元素中。


import torch

t1 = torch.randn((2, 3), dtype=torch.float32)
s1 = 2.5

t2 = torch.add(t1, s1)
print(t2)

2. 對兩個(gè)向量的操作

對兩個(gè)長度相等的向量進(jìn)行相加。add函數(shù)對于兩個(gè)長度相等的向量的操作,即將它們的對位元素相加,同時(shí)輸出一個(gè)新的向量。


import torch

v1 = torch.randn((3,), dtype=torch.float32)
v2 = torch.randn((3,), dtype=torch.float32)

v3 = torch.add(v1, v2)
print(v3)

3. 對兩個(gè)矩陣的操作

對兩個(gè)矩陣進(jìn)行相加。當(dāng)兩個(gè)矩陣的維數(shù)相等時(shí),add函數(shù)會(huì)將兩個(gè)矩陣對應(yīng)的元素相加,輸出一個(gè)新的矩陣。


import torch

m1 = torch.randn((2, 3), dtype=torch.float32)
m2 = torch.randn((2, 3), dtype=torch.float32)

m3 = torch.add(m1, m2)
print(m3)

三、torch.add()的應(yīng)用

1. 用add實(shí)現(xiàn)ReLU函數(shù)

ReLU函數(shù)是一種常用的激活函數(shù),可以用于神經(jīng)網(wǎng)絡(luò)中的隱藏層。ReLU函數(shù)的公式為y=max(0,x),即當(dāng)輸入x小于0時(shí),輸出為0;當(dāng)輸入x大于等于0時(shí),輸出為x。

使用torch.add函數(shù),可以很容易的實(shí)現(xiàn)ReLU函數(shù)。具體實(shí)現(xiàn)方式是將輸入張量中的負(fù)數(shù)部分變?yōu)?,其余元素不變:


import torch

def relu(x):
    return torch.add(x, torch.zeros_like(x).fill_(0.0).clamp_min_(x))

t1 = torch.randn((2, 3), dtype=torch.float32)
t2 = relu(t1)
print(t1, '\n', t2)

2. 實(shí)現(xiàn)自適應(yīng)梯度裁剪

自適應(yīng)梯度裁剪是一種常用的技術(shù),可以幫助神經(jīng)網(wǎng)絡(luò)在訓(xùn)練過程中更好地收斂。自適應(yīng)梯度裁剪需要計(jì)算每個(gè)參數(shù)的梯度范數(shù),然后根據(jù)每個(gè)梯度的范數(shù)進(jìn)行相應(yīng)的裁剪,以幫助網(wǎng)絡(luò)收斂。

使用torch.add函數(shù)可以很容易的實(shí)現(xiàn)自適應(yīng)梯度裁剪。具體思路是計(jì)算梯度范數(shù),比較梯度范數(shù)與設(shè)定的閾值大小,然后按比例將梯度向量進(jìn)行縮放。


import torch

def adaptive_grad_clip(grad, threshold):
    norm = torch.norm(grad)
    if norm > threshold:
        grad = torch.div(grad, norm / threshold)
    return grad

t1 = torch.randn((2, 3), dtype=torch.float32, requires_grad=True)
t2 = t1.mean()
t2.backward()
grad = t1.grad
grad_clip = adaptive_grad_clip(grad, 0.05)
t1.grad = grad_clip
print(t1.grad)

四、結(jié)論

torch.add函數(shù)在PyTorch中是一個(gè)非常重要的數(shù)學(xué)函數(shù),在神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程中有著廣泛的應(yīng)用。本文對torch.add函數(shù)在不同維度的操作進(jìn)行了詳細(xì)的介紹,同時(shí)給出了該函數(shù)在實(shí)際場景中的兩個(gè)應(yīng)用案例。在實(shí)際的開發(fā)過程中,可以更好的理解torch.add函數(shù)的使用方式,進(jìn)而更高效地完成各類深度學(xué)習(xí)模型的編寫。

聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
Vue2轉(zhuǎn)Vue3全面總結(jié)

本篇文章旨在介紹Vue2到Vue3的轉(zhuǎn)化過程,并從多個(gè)角度進(jìn)行詳細(xì)闡述。一、Vue2和Vue3有哪些不同點(diǎn)?Vue2和Vue3的不同點(diǎn)主要體現(xiàn)在以下幾個(gè)方面:...詳情>>

2023-11-22 23:45:12
Uniapp點(diǎn)擊事件全解析

Uniapp是一個(gè)跨平臺(tái)的框架,開發(fā)者可以通過一份代碼適配多個(gè)移動(dòng)平臺(tái),包括iOS、Android、H5、小程序等。其中,點(diǎn)擊事件作為移動(dòng)應(yīng)用中常見的交...詳情>>

2023-11-22 23:23:36
byte轉(zhuǎn)string詳解

byte轉(zhuǎn)string是編程中經(jīng)常遇到的一個(gè)操作。無論是在文件處理、網(wǎng)絡(luò)傳輸還是數(shù)據(jù)存儲(chǔ)上,都需要將byte轉(zhuǎn)為string進(jìn)行處理。本文將從多個(gè)方面詳解...詳情>>

2023-11-22 23:16:23
C++ sort頭文件詳解

一、sort頭文件介紹C++ sort頭文件是C++標(biāo)準(zhǔn)庫中的一個(gè)重要頭文件,用來排序(主要是升序)數(shù)組或序列。通過對sort函數(shù)的調(diào)用,C++ sort頭文件...詳情>>

2023-11-22 22:15:11
如何清除svchost病毒

一、了解svchost病毒svchost病毒是一種比較常見的惡意軟件,它通過偽裝成系統(tǒng)進(jìn)程的方式進(jìn)行隱藏,進(jìn)而竊取用戶的個(gè)人信息和系統(tǒng)信息。而且svch...詳情>>

2023-11-22 22:04:23