《Pytorch神經網路高效入門教程》筆記

2021-10-06 08:58:45 字數 2196 閱讀 7908

之前也寫過pytorch入門教程的筆記,不過好久不自己動手寫都有點忘了,這次這個教程講了挺多官方教程沒講的東西,還是值得記一下

1、gpu初探

(1)將張量轉移到gpu上: *.cuda()

eg. t = t.cuda()

(2)gpu只適合特定任務,比如能分解成多個小任務平行計算

另外將計算轉移到gpu也有不小的開銷,所以簡單的任務直接用cpu完成就好了

2、tensor初探

tensor的三個屬性:

t.dtype:資料型別

t.device:裝置(gpu/cpu)

t.layout:預設為strided

注意:不同型別/裝置的tensor無法進行運算

3、numpy array轉換為tensor

data = np.array([1,2,3])

(1)t1 = torch.tensor(data) #這個為建構函式

(2)t2 = torch.tensor(data) #工廠函式

(3)t3 = torch.as_tensor(data) #工廠函式

(4)t4 = torch.from_numpy(data) #工廠函式

(1)會預設把輸入資料轉換為float32

(2)(3)(4)則是根據輸入資料的型別推斷輸出資料的型別(這裡是int32)

當然也可以在輸入時直接設定輸出型別

t5 = torch.tensor(np.array([1,2,3]), dtype=torch.float64)

但建構函式不能這樣設定

note:(3)和(4)在轉換時只是複製了指標,也就是共享記憶體,改變numpy也會改變tensor

使用哪個函式?

一、通常使用torch.tensor(),不容易出錯

二、效能調優時使用torch.as_tensor()

為什麼不適用torch.from_numpy()?

因為它只接收numpy資料型別,其他型別不接收

4、reshape

(1)獲取tensor的元素數量

t.numel()

(2)squeeze和unsqueeze

torch.squeeze(a)  #去掉a的所有為1的axis

torch.unsqueeze(a,2) #在a的index=2的axis插入乙個1,即增加乙個維度

(3)flatten壓扁

其實就是先t.reshape(1,-1),然後t.squeeze()去掉為1的軸

不過torch有實現好的:torch.flatten(t)

5、element-wise操作

這裡主要是對axis的理解比較關鍵

t = torch.tensor([

[1,1,1,1],

[2,2,2,2],

[3,3,3,3]],dtype=int32)

t.sum(dim=0)

out:tensor[6,6,6,6]

我們來看一下這個"dim=0"是什麼意思?

dim=0代表以第0軸為單位進行運算

而以第0軸為單位又是什麼意思呢?

就是sum變成了[0]+t[1]+t[2]或者t[0,:]+t[1,:]+t[2,:]

dim=1時,

則為t[:,0]+t[:,1]+t[:,2]+t[:,3]

note!

運算後的維度即把這個軸去掉後的維度

eg.t.shape=[2,3,4]t.sum(dim=0).shape=[3,4]

用這種方法來推它到底是怎麼運算的也可以

pytorch搭建神經網路入門

autograd自動求導 pytorch 是乙個基於python的科學計算包,用於代替numpy,可以利用gpu的效能進行計算 作為乙個深度學習平台。張量 tensor 類似於numpy中的ndarray,但還可以在gpu上使用,實現加速計算的效果。建立張量的幾種方式 建立乙個沒有初始化的矩陣張量 ...

pytorch入門學習(三) 神經網路

神經網路可以使用torch.nn包構建.autograd實現了反向傳播功能,但是直接用來寫深度學習的 在很多情況下還是稍顯複雜,torch.nn是專門為神經網路設計的模組化介面.nn構建於autograd之上,可用來定義和執行神經網路.nn.module是nn中最重要的類,可把它看成是乙個網路的封裝...

pytorch搭建簡單神經網路入門

參考自 以下 摘抄自 請先閱讀上述參考文章。改了幾個引數試試 import torch import matplotlib.pyplot as plt 搭建神經網路 class neuro net torch.nn.module 主要構成為 init 和forward函式 神經網路 def init...