【Pytorch神经网络基础理论篇】 04 线性代数
1.基本概念
?
?
?
?
?
?
?
?
?
?
?2.線性代數的實現
2.1標量
標量由只有一個元素的張量表示。
import torchx = 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.2 向量
向量視為標量值組成的列表。我們將這些標量值稱為向量的元素分量。
x = torch.arange(4) x tensor([0, 1, 2, 3])2.3?長度、維度、形狀
與普通的Python數組一樣,我們可以通過調用Python的內置len()函數來訪問張量的長度。
len(x)?4
x.shape #在這個意義上,張量的某個軸的維數就是這個軸的長度。 torch.Size([4])?2.5?矩陣
#當調用函數來實例化張量時,我們可以通過指定兩個分量 m 和 n 來創建一個形狀為 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]])?
A.T tensor([[ 0, 4, 8, 12, 16],[ 1, 5, 9, 13, 17],[ 2, 6, 10, 14, 18],[ 3, 7, 11, 15, 19]])?作為方矩陣的一種特殊類型,對稱矩陣(symmetric matrix)AA等于其轉置:A=A?A=A?。這里我們定義一個對稱矩陣BB:
B = torch.tensor([[1, 2, 3], [2, 0, 4], [3, 4, 5]]) B tensor([[1, 2, 3],[2, 0, 4],[3, 4, 5]])現在我們將B與它的轉置進行比較。
B == B.T tensor([[True, True, True],[True, True, True],[True, True, True]])?2.6 張量
就像向量是標量的推廣,矩陣是向量的推廣一樣。張量(本小節中的“張量”指代數對象)為我們提供了描述具有任意數量軸的nn維數組的通用方法。例如,向量是一階張量,矩陣是二階張量。
當我們開始處理圖像時,張量將變得更加重要,圖像以nn維數組形式出現,其中3個軸對應于高度、寬度,以及一個通道(channel)軸,用于堆疊顏色通道(紅色、綠色和藍色)。
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]]])?2.7?張量算法的基本性質
標量、向量、矩陣和任意數量軸的張量有一些很好的屬性,通常會派上用場。例如,你可能已經從按元素操作的定義中注意到,任何按元素的一元運算都不會改變其操作數的形狀。同樣,給定具有相同形狀的任意兩個張量,任何按元素二元運算的結果都將是相同形狀的張量。例如,將兩個相同形狀的矩陣相加會在這兩個矩陣上執行元素加法。
A = torch.arange(20, dtype=torch.float32).reshape(5, 4) B = A.clone() # 通過分配新內存,將A的一個副本分配給B A, 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.]])) 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]))?2.8?張量算法的基本性質
求和:
x = torch.arange(4, dtype=torch.float32) x, x.sum() (tensor([0., 1., 2., 3.]), tensor(6.))默認情況下,調用求和函數會沿所有的軸降低張量的維度,使它變為一個標量。
我們還可以指定張量沿哪一個軸來通過求和降低維度。 由于輸入矩陣沿0軸降維以生成輸出向量,因此輸入的軸0的維數在輸出形狀中丟失。
一個與求和相關的量是平均值(mean或average)。我們通過將總和除以元素總數來計算平均值。在代碼中,我們可以調用函數來計算任意形狀張量的平均值。
A.mean(), A.sum() / A.numel() (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.]))?2.9?非降維求和
?2.10?點積
?
?
?
?
?
?
axis=0 形狀就是去掉第一個
axis=1?形狀就是去掉第二個
axis=2?形狀就是去掉第三個
axis=[1,2] 形狀就是去掉第二個和第三個
?
?
?
?
?
QA
1.稀疏化會導致出現有一百萬個列,每個列只有一個數。但是不會影響太多
2.深度學習/機器學習為什么用張量?
深度學習是機器學習的一部分,統計學家認為是計算機對數學統計的理解,所以用張量
3.copy和clone的區別:
深拷貝和淺拷貝
4.對哪一維求和 等同于消除哪一維(正確)
5.torch不區分行列向量嗎?
一維張量一定是行向量
列向量是一個矩陣
可以用二位矩陣來表示行列向量。
對于計算機來說都是數組
6.稀疏的時候可以把他當做單詞來做詞向量,并不是每次都可以,絕大多數可以。
7.關于學習框架的選擇:工具和學習應該分開,跟著時代走,跟著潮流走。應該學習怎么樣開車,而不是開什么車。不要因為工具限制自己。
8.醫療圖像中的 SVS格式和醫生勾畫的XML格式的文件如何預處理?
兩種做法:其一、像素級解決,利用手寫文字識別解決。其二、利用nop的形式解決,通過計算機視覺的方式。也可兩個配合使用。
9.?????axis = 0按照行,可以理解為把“行”給抹去只剩1行,也就是上下壓扁。
????????axis = 1按照列,可以理解為把“列”給抹去只剩1列,也就是左右壓扁。
總結
以上是生活随笔為你收集整理的【Pytorch神经网络基础理论篇】 04 线性代数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tensorflow训练神经网络时los
- 下一篇: 图像分类_01图像分类简介:挑战+近邻分