【Dive into Deep Learning / 動手學深度學習】第二章 - 第一節:資料操作

語言: CN / TW / HK

持續創作,加速成長!這是我參與「掘金日新計劃 · 6 月更文挑戰」的第1天,點選檢視活動詳情

前言

Hello!

非常感謝您閱讀海轟的文章,倘若文中有錯誤的地方,歡迎您指出~  

自我介紹 ଘ(੭ˊᵕˋ)੭

暱稱:海轟

標籤:程式猿|C++選手|學生

簡介:因C語言結識程式設計,隨後轉入計算機專業,獲得過國家獎學金,有幸在競賽中拿過一些國獎、省獎...已保研。

學習經驗:紮實基礎 + 多做筆記 + 多敲程式碼 + 多思考 + 學好英語!  

唯有努力💪  

知其然 知其所以然!

2.1 資料操作

2.1.1. 入門

torch.arange()

python x = torch.arange(12) x

tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])

shape

python x.shape

torch.Size([12])

numel()

張量中元素的總數

python x.numel()

12

reshape()

在這裡插入圖片描述

可以用-1來呼叫此自動計算出維度的功能。 即我們可以用x.reshape(-1,4)x.reshape(3,-1)來取代x.reshape(3,4)

ones()

python torch.ones((2, 3, 4))

在這裡插入圖片描述

randn()

建立一個形狀為(a,b,..)的張量。 其中的每個元素都從均值為0、標準差為1的標準高斯分佈(正態分佈)中隨機取樣 python torch.randn(3, 4)

在這裡插入圖片描述

2.1.2. 運算子

+、-、、/、* 、exp

同一形狀的任意兩個張量上呼叫按元素操作

在這裡插入圖片描述 在這裡插入圖片描述

總結:張量形狀一樣,在對應位置的元素進行相應的運算

多個張量連結(concatenate)

使用torch.cat()

在這裡插入圖片描述

==

在這裡插入圖片描述

sum()

在這裡插入圖片描述

2.1.3. 廣播機制

在這裡插入圖片描述 在這裡插入圖片描述

python a是3行1列, b是1行三列 a與b相加時 a變為3行2列(擴列),b也變為3行2列(擴行),再相加(對應位置元素相加)

2.1.4. 索引和切片

在這裡插入圖片描述

X[1:3]:[1,3),第一行、第二行(不包括第三行)


指定索引來將元素寫入矩陣 在這裡插入圖片描述


在這裡插入圖片描述

2.1.5. 節省記憶體

在這裡插入圖片描述 id():查詢變數在記憶體中的位置

執行Y=Y+X時

先計算Y+X,得到一個結果,會儲存在一個新的記憶體裡面

然後再使變數Y指向這個記憶體

一般來說,這樣的操作不可取:同時更新多個引數,需要多個新記憶體

所以需要儘量進行原地更新

若不進行原地更新,其他引用仍然會指向舊的記憶體位置, 某些程式碼可能會無意中引用舊的引數

比如原來Y和K、T都指向一個記憶體地址,但是執行完Y=Y+X後,Y指向了新的記憶體地址,但是K、T依然還指向原來的記憶體地址,再使用K、T則會發生錯誤,所以儘量需要原地修改,這樣修改後,K、T、Y依然指向的是同一個記憶體地址


可以使用切片表示法將操作的結果分配給先前分配的陣列,例如Y[:] = <expression>,實現原地操作

```python X = torch.arange(3) Y = torch.arange(3) before = id(Y) Y = Y + X id(Y) == before

False

使用`Y[:] = Y + X`python X = torch.arange(3) Y = torch.arange(3) before = id(Y) Y[:] = Y + X id(Y) == before

True

```

或者 Y += X

```python X = torch.arange(3) Y = torch.arange(3) before = id(Y) Y += X id(Y) == before

True

```

2.1.6. 轉換為其他Python物件

在這裡插入圖片描述

結語

學習資料:http://zh.d2l.ai/

文章僅作為個人學習筆記記錄,記錄從0到1的一個過程

希望對您有一點點幫助,如有錯誤歡迎小夥伴指正

在這裡插入圖片描述

「其他文章」