之前也寫過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...