1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        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新技能

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


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

        • 首先對(duì)內(nèi)置函數(shù)有一個(gè)功能印象,知道它的存在,使用時(shí)再查具體怎么用
        • 其次,我還會(huì)介紹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])

        返回絕對(duì)值

        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ù)并不會(huì)對(duì)原對(duì)象進(jìn)行調(diào)整,而是輸出新的結(jié)果。

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

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

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

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

        3 常用科學(xué)計(jì)算

        需要注意的有以下兩點(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é)計(jì)算只能作用于tensor對(duì)象,而不能和Python對(duì)象混用
        #?計(jì)算3的3次方
        torch.pow(3,?3)
        #?TypeError

        torch.pow(torch.tensor(3),?3)
        #?tensor(27)
        • 由于會(huì)涉及GPU計(jì)算,所以對(duì)運(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é)計(jì)算有:

        數(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)
        返回輸入的元素平方
        對(duì)數(shù)運(yùn)算

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

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

        4 統(tǒng)計(jì)分析

        此類計(jì)算是對(duì)某張量進(jìn)行某種總結(jié),最后得出一個(gè)具體總結(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)計(jì)算兩個(gè)張量的閔式距離,可使用不同范式
        torch.topk(t)返回t中最大的k個(gè)值對(duì)應(yīng)的指標(biāo)
        • 這里我們常用的距離公式dist(),為閔可夫斯基距離,通過輸入不同的p值,可方便計(jì)算曼哈頓距離、歐拉距離:
        #?輸入float型
        t1?=?torch.tensor([1,?2,?3]).float()
        t2?=?torch.tensor([4,?5,?6]).float()

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

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

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

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

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

        #?創(chuàng)建一個(gè)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.]]])

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

        #?第三個(gè)維度是列,就是零維張量,就是每個(gè)向量進(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

        其它比較計(jì)算還有:

        函數(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)課程,白嫖了?。砀絻r(jià)值399元資料包)

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

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


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

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产无套精品久久久久久苑冰冰 | 操操操屄 | 婷婷五月天激情小说 | 夜色88V精品国产亚洲 | 五月天激情四射伊人影院 | 欧美黄色看 | 啊灬啊灬啊灬快灬深用力男女 | 国产精品电影久久 | 国产13区| 波多野结衣亚洲一区二区三区 |