<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          5分鐘玩轉(zhuǎn)PyTorch |張量的數(shù)學(xué)科學(xué)運(yùn)算

          共 3490字,需瀏覽 7分鐘

           ·

          2021-12-11 07:31

          AI因你而升溫,記得加星標(biāo)哦!

          ↑?關(guān)注 + 星標(biāo)?,每天學(xué)Python新技能

          后臺回復(fù)【大禮包】送你Python自學(xué)大禮包


          在介紹完PyTorch中的廣播運(yùn)算后,繼續(xù)為大家介紹PyTorch的內(nèi)置數(shù)學(xué)運(yùn)算:

          • 首先對內(nèi)置函數(shù)有一個功能印象,知道它的存在,使用時再查具體怎么用
          • 其次,我還會介紹PyTorch科學(xué)運(yùn)算的注意事項(xiàng)與一些實(shí)用小技巧

          1 基本數(shù)學(xué)運(yùn)算

          函數(shù)功能
          torch.add(t1,t2 )等效于t1+t2
          torch.sub(t1,t2)等效于t1-t2
          torch.mul(t1,t2)等效于t1*t2
          torch.div(t1,t2)等效于t1/t2

          2 進(jìn)行數(shù)值調(diào)整

          t?=?torch.randn(5)
          t
          #?tensor([?0.3806,??0.9064,?-1.9179,??2.0816,?-0.4153])

          返回絕對值

          torch.abs(t)
          #?tensor([0.3806,?0.9064,?1.9179,?2.0816,?0.4153])

          返回相反數(shù)

          torch.neg(t)
          #?tensor([-0.3806,?-0.9064,??1.9179,?-2.0816,??0.4153])

          四舍五入

          torch.round(t)
          #?tensor([?0.,??1.,?-2.,??2.,?-0.])

          向上取整

          torch.ceil(t)?
          #?tensor([?1.,??1.,?-1.,??3.,?-0.])

          向下取整

          torch.floor(t)
          #?tensor([?0.,??0.,?-2.,??2.,?-1.])

          :雖然此類型函數(shù)并不會對原對象進(jìn)行調(diào)整,而是輸出新的結(jié)果。

          #?t本身并未發(fā)生變化
          t
          #?tensor([?0.3806,??0.9064,?-1.9179,??2.0816,?-0.4153])

          若要對原對象本身進(jìn)行修改,可使用方法_()

          #?使用方法_()
          t.round_()
          #?tensor([?0.,??1.,?-2.,??2.,?-0.])

          #?原對象也進(jìn)行了改變
          t
          #?tensor([?0.,??1.,?-2.,??2.,?-0.])

          3 常用科學(xué)計算

          需要注意的有以下兩點(diǎn):

          • 因?yàn)閺埩磕苤付ㄔ?code style="padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(200, 54, 6);font-size: 13px;">CPU或者GPU上運(yùn)行,因此tensor的大多數(shù)科學(xué)計算只能作用于tensor對象,而不能和Python對象混用
          #?計算3的3次方
          torch.pow(3,?3)
          #?TypeError

          torch.pow(torch.tensor(3),?3)
          #?tensor(27)
          • 由于會涉及GPU計算,所以對運(yùn)算結(jié)果一般是小數(shù)的函數(shù),要求函數(shù)只能輸入浮點(diǎn)型張量,而不能是整型
          t?=?torch.arange(1,?4)
          t.dtype
          #?torch.int64
          torch.exp(t)
          #?RuntimeError

          torch.exp(t.float())
          #?tensor([1.0000,?2.7183,?0.1353,?7.3891,?1.0000])

          其他常用科學(xué)計算有:

          數(shù)學(xué)運(yùn)算函數(shù)數(shù)學(xué)公式功能
          冪運(yùn)算

          torch.exp(t)
          返回以e為底、t中元素為冪的張量
          torch.pow(t,n)
          返回t的n次冪
          torch.sqrt(t)
          返回t的平方根
          torch.square(t)
          返回輸入的元素平方
          對數(shù)運(yùn)算

          torch.log10(t)
          返回以10為底的t的對數(shù)
          torch.log(t)
          返回以e為底的t的對數(shù)
          torch.log2(t)
          返回以2為底的t的對數(shù)
          torch.log1p(t) + 1)返回一個加自然對數(shù)的輸入數(shù)組。
          三角運(yùn)算

          torch.sin(t)
          正弦
          torch.cos(t)
          余弦
          torch.tan(t)
          正切

          4 統(tǒng)計分析

          此類計算是對某張量進(jìn)行某種總結(jié),最后得出一個具體總結(jié)值的函數(shù)。

          函數(shù)功能
          torch.mean(t)返回張量均值
          torch.var(t)返回張量方差
          torch.std(t)返回張量標(biāo)準(zhǔn)差
          torch.var_mean(t)返回張量方差和均值
          torch.std_mean(t)返回張量標(biāo)準(zhǔn)差和均值
          torch.max(t)返回張量最大值
          torch.argmax(t)返回張量最大值索引
          torch.min(t)返回張量最小值
          torch.argmin(t)返回張量最小值索引
          torch.median(t)返回張量中位數(shù)
          torch.sum(t)返回張量求和結(jié)果
          torch.logsumexp(t)返回張量各元素求和結(jié)果,適用于數(shù)據(jù)量較小的情況
          torch.prod(t)返回張量累乘結(jié)果
          torch.dist(t1, t2)計算兩個張量的閔式距離,可使用不同范式
          torch.topk(t)返回t中最大的k個值對應(yīng)的指標(biāo)
          • 這里我們常用的距離公式dist(),為閔可夫斯基距離,通過輸入不同的p值,可方便計算曼哈頓距離、歐拉距離:
          #?輸入float型
          t1?=?torch.tensor([1,?2,?3]).float()
          t2?=?torch.tensor([4,?5,?6]).float()

          #?計算曼哈頓距離
          torch.dist(t1,?t2,?1)
          #?tensor(9.)

          #?計算歐拉距離
          torch.dist(t1,?t2,?2)
          #?tensor(5.1962)
          • 統(tǒng)計分析是一個張量序列返回一個結(jié)果,因此若是針對高維張量,則可指定某維度進(jìn)行計算:
          #?創(chuàng)建一個3*3的二維張量
          t2?=?torch.arange(6).float().reshape(2,?3)
          t2

          #?按照第一個維度求和(按列求和)
          torch.sum(t2,?dim?=?0)
          #?tensor([3.,?5.,?7.])

          理解為:按照第一個維度是行,所以將每行對應(yīng)元素相加,就是按列求和。

          這里一定要將dim參數(shù)和shape返回結(jié)果一一對應(yīng)。不理解的同學(xué)強(qiáng)烈推薦閱讀深入理解數(shù)據(jù)的維度

          #?創(chuàng)建一個2*3*4的三維張量
          t3?=?torch.arange(24).float().reshape(2,?3,?4)
          t3
          #?tensor([[[?0.,??1.,??2.,??3.],
          #??????????[?4.,??5.,??6.,??7.],
          #??????????[?8.,??9.,?10.,?11.]],

          #?????????[[12.,?13.,?14.,?15.],
          #??????????[16.,?17.,?18.,?19.],
          #??????????[20.,?21.,?22.,?23.]]])

          #?第一維度是代表幾個二維矩陣,就是二維矩陣的對應(yīng)位置相加
          torch.sum(t3,?dim?=?0)
          #?tensor([[12.,?14.,?16.,?18.],
          #?????????[20.,?22.,?24.,?26.],
          #?????????[28.,?30.,?32.,?34.]])
          ????????
          #?第二個維度代表行,就是向量,每個二維矩陣中的向量對應(yīng)位置相加
          torch.sum(t3,?dim?=?1)
          #?tensor([[12.,?15.,?18.,?21.],
          #?????????[48.,?51.,?54.,?57.]])

          #?第三個維度是列,就是零維張量,就是每個向量進(jìn)行相加
          torch.sum(t3,?dim?=?2)
          #?tensor([[?6.,?22.,?38.],
          #?????????[54.,?70.,?86.]])

          這樣理解維度是不是清晰明了?

          5 比較運(yùn)算

          常用于不同張量之間的邏輯運(yùn)算,最終返回布爾值。需要注意的是eq()equal()的區(qū)別。

          t1?=?torch.tensor([1.0,?2,?4])
          t2?=?torch.tensor([1.0,?2,?5])

          比較各元素是否相等

          torch.eq(t1,?t2)?
          #?tensor([?True,??True,?False])

          #?等效t1?==?t2
          t1?==?t2
          #?tensor([?True,??True,?False])

          判斷是否是相同的張量

          torch.equal(t1,?t2)?
          #?False

          其它比較計算還有:

          函數(shù)功能
          torch.gt(t1, t2)比較t1各元素是否大于t2各元素,等效>
          torch.lt(t1, t2)比較t1各元素是否小于t2各元素,等效<
          torch.ge(t1, t2)比較t1各元素是否大于或等于t2各元素,等效>=
          torch.le(t1, t2)比較t1各元素是否小于等于t2各元素,等效<=
          torch.ne(t1, t2)比較t1、t2各元素是否不相同,等效!=



          推薦閱讀

          1. 機(jī)密!網(wǎng)易員工數(shù)據(jù)分析內(nèi)訓(xùn)課程,白嫖了!(另附價值399元資料包)

          2. 豆瓣評分 9.0,超 10 萬開發(fā)者的入門選擇,這本經(jīng)典好書終于升級啦!

          3. 臥槽!又來一個Python學(xué)習(xí)神器!!!


          瀏覽 164
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美成人高清无码 | 成人激情四射视频婷婷丁香网 | 影音先锋在线三级 | 真人一级黄色片 | 女人18片毛片90分钟 |