最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

05 線性代數(shù)【動手學(xué)深度學(xué)習(xí)v2】

2021-11-12 18:57 作者:如果我是泡橘子  | 我要投稿

線性代數(shù)




多維數(shù)組和線性代數(shù)的區(qū)別?

  • 多維數(shù)組是一個計算機的概念,純計算機的語言
  • 線性代數(shù)是從數(shù)學(xué)上的表達(dá),具有數(shù)學(xué)上的意義



標(biāo)量


  • 可以理解為一個單個的值


簡單操作


  • c = a + b
  • c = a * b
  • c = sin(a)


長度






向量


  • 可以理解為一行值,既可以是行向量,也可以是列向量


簡單操作



長度




點乘


  • 對應(yīng)元素相同


正交


  • 兩個向量如果是垂直的話,他們的點乘的值為0





矩陣


一般用大寫字母表示矩陣,下面為了方便用小寫字母表示


簡單操作



乘法


  • 矩陣乘以向量(從直觀上來講是一個扭曲的空間)
    ?
    線性代數(shù) P1 - 04:43
    ?
  • 矩陣乘以矩陣


范數(shù)(矩陣的長度)








  • 對稱矩陣總是能找到特征向量,但不是每個矩陣都能找到特征向量





線性代數(shù)實現(xiàn)


1、標(biāo)量由只有一個元素的張量表示


import torch


x = torch.tensor([3.0])

y = torch.tensor([2.0])


x + y , x * y , x / y , x ** y

輸出:

(tensor([5.]), tensor([6.]), tensor([1.5000]), tensor([9.]))



2、可以將向量視為標(biāo)量值組成的列表


x = torch.arange(4)

x

輸出:

tensor([0, 1, 2, 3])



3、通過張量的索引來訪問任一元素


x[3]

輸出:

tensor(3)



4、訪問張量的長度


len(x)

輸出:

4



5、只有一個軸的張量,形狀只有一個元素


x.shape

輸出:

torch.Size([4])



6、通過指定兩個分量m和n來創(chuàng)建一個形狀為 m * n 的矩陣


a = torch.arange(20).reshape(5,4)

a

輸出:

tensor([[ 0, 1, 2, 3],

[ 4, 5, 6, 7],

[ 8, 9, 10, 11],

[12, 13, 14, 15],

[16, 17, 18, 19]])



7、矩陣的轉(zhuǎn)置


a.T

輸出:

tensor([[ 0, 4, 8, 12, 16],

[ 1, 5, 9, 13, 17],

[ 2, 6, 10, 14, 18],

[ 3, 7, 11, 15, 19]])



8、對稱矩陣(symmetric matrix)

對稱矩陣等于其轉(zhuǎn)置:a = aT


b = torch.tensor([[1,2,3],[2,3,1],[3,2,1]])

b

輸出:

tensor([[1, 2, 3],

[2, 3, 1],

[3, 2, 1]])


b == b.T

輸出:

tensor([[ True, True, True],

[ True, True, False],

[ True, False, True]])

  • 矩陣的所有元素都是關(guān)于對角線對稱的



9、就像向量是標(biāo)量的推廣,矩陣是向量的推廣一樣,我們可以構(gòu)建具有更多軸的數(shù)據(jù)結(jié)構(gòu)


x = torch.arange(24).reshape(2,3,4)

x

輸出:

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]]])

  • tensor中的行是最后一維,列是倒數(shù)第二維,以此類推



10、給定具有相同形狀的任何兩個張量,任何按元素二元計算的結(jié)果都將是相同形狀的張量


a = torch.arange(20,dtype = torch.float32).reshape(5,4)

b = a.clone()

a , a + b

  • 通過分配新內(nèi)存,將 a 的一個副本分配給 b

輸出:

(tensor([[ 0., 1., 2., 3.],

[ 4., 5., 6., 7.],

[ 8., 9., 10., 11.],

[12., 13., 14., 15.],

[16., 17., 18., 19.]]),

tensor([[ 0., 2., 4., 6.],

[ 8., 10., 12., 14.],

[16., 18., 20., 22.],

[24., 26., 28., 30.],

[32., 34., 36., 38.]]))



11、兩個矩陣的按元素乘法稱為 哈達(dá)瑪積(Hadamard product) 數(shù)學(xué)符號是?里面一個點


a * b

輸出:

tensor([[ 0., 1., 4., 9.],

[ 16., 25., 36., 49.],

[ 64., 81., 100., 121.],

[144., 169., 196., 225.],

[256., 289., 324., 361.]])


a = 2

x = torch.arange(24).reshape(2,3,4)

a + x , ( a * x ).shape

輸出:

(tensor([[[ 2, 3, 4, 5],

[ 6, 7, 8, 9],

[10, 11, 12, 13]],

[[14, 15, 16, 17],

[18, 19, 20, 21],

[22, 23, 24, 25]]]),

torch.Size([2, 3, 4]))

  • 張量和一個標(biāo)量進(jìn)行運算實際上就是張量的所有元素和這個標(biāo)量進(jìn)行運算



12、計算其元素的和


x = torch.arange(4,dtype=torch.float32)

x , x.sum()

輸出:

(tensor([0., 1., 2., 3.]), tensor(6.))



13、表示任意形狀張量的元素和


a = torch.arange(20,dtype = torch.float32).reshape(5,4)

a.shape , a.sum()

輸出:

(torch.Size([5, 4]), tensor(190.))

  • .sum():不管張量是什么形狀,計算出來的結(jié)果始終是一個標(biāo)量


a = torch.arange(20 * 2,dtype = torch.float32).reshape(2,5,4)

a.shape , a.sum()

輸出:

(torch.Size([2, 5, 4]), tensor(780.))



14、指定求和張量的值


a_sum_axis0 = a.sum(axis = 0)

a_sum_axis0 , a_sum_axis0.shape

輸出:

(tensor([[20., 22., 24., 26.],

[28., 30., 32., 34.],

[36., 38., 40., 42.],

[44., 46., 48., 50.],

[52., 54., 56., 58.]]),

torch.Size([5, 4]))


a_sum_axis1 = a.sum(axis = 1)

a_sum_axis1 , a_sum_axis1.shape

輸出:

(tensor([[ 40., 45., 50., 55.],

[140., 145., 150., 155.]]),

torch.Size([2, 4]))


a_sum_axis2 = a.sum(axis = 2)

a_sum_axis2 , a_sum_axis2.shape

輸出:

(tensor([[ 6., 22., 38., 54., 70.],

[ 86., 102., 118., 134., 150.]]),

torch.Size([2, 5]))


a.sum(axis = [0 , 1]).shape

輸出:

torch.Size([4])



15、一個與求和相關(guān)的量是 平均值(mean或average)


a = torch.arange(20,dtype = torch.float32).reshape(5,4)

a.mean() , a.sum() / a.numel()

  • 等價于對元素求和然后除以元素的個數(shù)

輸出:

(tensor(9.5000), tensor(9.5000))


a.mean(axis = 0) , a.sum(axis = 0) / a.shape[0]

  • 等價于求和然后除以維度的形狀

輸出:

(tensor([ 8., 9., 10., 11.]), tensor([ 8., 9., 10., 11.]))



16、計算綜合或均值時保持軸數(shù)不變


sum_a = a.sum(axis = 1 , keepdims = True)

sum_a

  • keepdims=True:使被求和的維度大小變?yōu)?,為1的好處是可以利用廣播機制

輸出:

tensor([[ 6.],

[22.],

[38.],

[54.],

[70.]])



17、通過廣播將 a 除以sum_a


a / sum_a

輸出:

tensor([[0.0000, 0.1667, 0.3333, 0.5000],

[0.1818, 0.2273, 0.2727, 0.3182],

[0.2105, 0.2368, 0.2632, 0.2895],

[0.2222, 0.2407, 0.2593, 0.2778],

[0.2286, 0.2429, 0.2571, 0.2714]])



18、某個軸計算a元素的累積總和


a.cumsum(axis = 0)

輸出:

tensor([[ 0., 1., 2., 3.],

[ 4., 6., 8., 10.],

[12., 15., 18., 21.],

[24., 28., 32., 36.],

[40., 45., 50., 55.]])



19、點積是相同位置的按元素乘積的和


y = torch.ones(4,dtype=torch.float32)

x , y , torch.dot(x,y)

輸出:

(tensor([0., 1., 2., 3.]), tensor([1., 1., 1., 1.]), tensor(6.))



20、可以通過執(zhí)行按元素乘法,然后進(jìn)行求和來表示兩個向量的點積


torch.sum(x * y)

輸出:

tensor(6.)



21、

a.shape , x.shape , torch.mv(a,x)

  • torch.mv():做矩陣向量的乘積

輸出:

(torch.Size([5, 4]), torch.Size([4]), tensor([ 14., 38., 62., 86., 110.]))



22、可以將矩陣-矩陣乘法AB看作簡單地執(zhí)行m次矩陣-向量積,并將結(jié)果拼接到一起,形成一個n * m矩陣


b = torch.ones(4,3)

torch.mm(a,b)

輸出:

tensor([[ 6., 6., 6.],

[22., 22., 22.],

[38., 38., 38.],

[54., 54., 54.],

[70., 70., 70.]])



23、L2范數(shù)是向量元素平方和的平方根


u = torch.tensor([3.0,-4.0])

torch.norm(u)

輸出:

tensor(5.)



24、L1范數(shù)表示為向量元素的絕對值之和

torch.abs(u).sum()

輸出:

tensor(7.)



25、矩陣的 弗羅貝尼烏斯范數(shù)(Frobenius norm) 實矩陣元素的平方和的平方根

torch.norm(torch.ones((4,9)))

輸出:

tensor(6.)

  • 等價于將矩陣?yán)梢粋€向量,然后做一個向量的范數(shù)
  • 計算簡單,是最常用的范數(shù)





按待定軸求和

?
按特定軸求和 P3 - 00:03
?

總的來說axis等于幾就去掉那一維(keepdim不為True時),當(dāng)keepdim為True時,將axis指定的那一維的shape置為1


import torch

a = torch.ones(2,5,4)

a.shape

輸出:

torch.Size([2, 5, 4])


a.sum().shape

輸出:

torch.Size([])

  • shape為空,表示它是一個標(biāo)量


a.sum(axis = 1).shape

輸出:

torch.Size([2, 4])


a.sum(axis = 1)

輸出:

tensor([[5., 5., 5., 5.],

[5., 5., 5., 5.]])


a.sum(axis = 0).shape

輸出:

torch.Size([5, 4])


a.sum(axis = [0,2]).shape

輸出:

torch.Size([5])


a.sum(axis = 1,keepdim=True).shape

輸出:

torch.Size([2, 1, 4])

  • 維度的個數(shù)沒有發(fā)生變化只是第2個元素(下標(biāo)為1)變換成了1





Q&A


1、這么轉(zhuǎn)化有什么負(fù)面影響?比如數(shù)值變得稀疏


稀疏矩陣不會有太多影響



2、問什么深度學(xué)習(xí)要用張量來表示?


整個機器學(xué)習(xí)都是用張量或者是用數(shù)值的矩陣來表示的,深度學(xué)習(xí)是由機器學(xué)習(xí)發(fā)展過來的,機器學(xué)習(xí)實際上是統(tǒng)計的計算機版本



3、求copy與clone的區(qū)別(是關(guān)于內(nèi)存的嗎)?


copy有可能是不copy內(nèi)存的(深度copy與淺copy)

clone一定會復(fù)制內(nèi)存



4、對哪一維求和就是消除那一維可以這么理解嗎?


可以這么理解,將某一維縮減成一個值



5、torch不區(qū)分行向量和列向量嗎?


  • 如果是一維向量的話一定是一個行向量
  • 列向量是一個矩陣
  • 可以用一個二維的矩陣來區(qū)分一個列向量和一個行向量



6、sum(axis=[0,1])怎么求?


  • 相當(dāng)于每次求和是對于一個矩陣來說的



7、請問torch中L1,L2正則項要怎么加入?


之后會講



8、稀疏的時候可以把它當(dāng)成單詞做詞向量解決嗎?


之后會講,稀疏的話可以當(dāng)成詞向量來進(jìn)行查表,但不見得每次都能這樣做,絕大部分可以這么做



9、張量的概念機器學(xué)習(xí)里和數(shù)學(xué)有哪些主要的區(qū)別?


  • 機器學(xué)習(xí)的張量其實不是張量,就是一個多維數(shù)組,跟數(shù)學(xué)的張量是不一樣的
  • 深度學(xué)習(xí)大部分的運算都是矩陣的運算,不會用到數(shù)學(xué)中張量的概念



10、這門課是不是只講基于pytorch的神經(jīng)網(wǎng)絡(luò)算法?學(xué)習(xí)其他算法可以先聽這門課嗎?


  • 工具和學(xué)習(xí)應(yīng)該是分開的
  • 主要是學(xué)會,然后拓展至其他框架



11、病理圖片的SVS格式和醫(yī)生勾畫的區(qū)域XML格式的文件如何進(jìn)行預(yù)處理?

?
線性代數(shù) QA P4 - 10:44
?



12、稀疏化之后有什么好的解決辦法?


被跳過了。。。



13、老師后面講算法的時候可以著重講一下算法提出的過程的直覺和數(shù)學(xué)嗎,想多了解算法背后的why?


?
線性代數(shù) QA P4 - 11:25
?




----end----?

05 線性代數(shù)【動手學(xué)深度學(xué)習(xí)v2】的評論 (共 條)

使用qq登录你需要登录后才可以评论。
雷波县| 云和县| 龙里县| 无锡市| 嘉峪关市| 自贡市| 永州市| 娱乐| 龙陵县| 长宁县| 裕民县| 宜川县| 噶尔县| 贵阳市| 英德市| 慈溪市| 南宁市| 新巴尔虎左旗| 荃湾区| 谷城县| 灵石县| 平南县| 海丰县| 普陀区| 绥中县| 枞阳县| 蚌埠市| 平乡县| 仙桃市| 永川市| 尉氏县| 西畴县| 舒兰市| 仁化县| 纳雍县| 中山市| 平阴县| 东乡族自治县| 芜湖县| 手机| 井陉县|