第二章 tensor和梯度計算

2021-10-10 09:24:16 字數 1500 閱讀 9159

一、資料操作

tensor

(1)建立

torch.tensor([888,444]) #直接建立值為[888,444]的張量

torch.empty(2,4) #2x4的空張量

torch.rand(2,4) #隨機初始化2x4的張量

torch.zeros(2,4,dtype = torch.long) #初始值全部為0的long型的張量

torch.randn_like(x,dtype=torch.float) #根據現有的x的形狀建立新的tensor,並指定新的資料型別

(2)獲取形狀(x為乙個張量)

x.shape 或

x.size()

(3)加法(x,y為張量)

x+y 或

torch.add(x,y)

torch.add(x,y,out=result) #指定result為計算的結果

y.add_(x) #此為inplace方法,結果存在y中

# 一般inplace方法都有字尾_

(4)索引

x=torch.tensor([[1,2,3,4,5],

[2,2,2,2,2],

[3,3,3,3,3],

[4,4,4,4,4]])

y=x[1,:] #得到的y為([2,2,2,2,2])

#注意此處y和x共享記憶體,改變y會導致x中對應的值也發生改變

(5)改變形狀

x.view(2,10) #x改為2x10的張量

x.view(1,-1) #x改為1x20的張量,其中-1相當於未知數,會自動計算出其值,此處為20/1=20

(6)產生不共享記憶體副本

y=x.clone() #clone後梯度回傳到y時會同時傳到源張量x

(7)和numpy的轉換

x.numpy() #轉為numpy

torch.from_numpy(x) # 轉為tensor

z=torch.tensor(y) # 此方法較為常見,但須注意此時的y和z不共享記憶體

(8)其他

x.item() #x從tensor型轉化為乙個number

#還有常見的內外積等操作,有需要再自行查閱文件即可

二、自動求梯度

自動求梯度

x = torch.ones(2, 2, requires_grad=true) 或

x.requires_grad_(true)

# 假設output是最後輸出的標量

output.backward()

x.grad.data.zero_() #每次反向傳播grad會累積,記得清零。

2.grad_fn

y=x*x*4

print(y.grad_fn)

輸出:

第二章 資料 變數和計算

1 列舉型別的定義 enum week thisweek 2 指定列舉常量的型別 enum week char thisweek 3 格式化輸出 include std setw 函式的使用 4 轉義序列,如 a 5 逗號運算子,返回最後乙個表示式的值 num3 num1 10,num2 20 則n...

第二章 進化計算

1 進化演算法求解優化問題的一般步驟 1 隨機給定一組初始解 2 評價當前這組解的效能 3 若當前解滿足要求或進化達到一定代數,計算結束 4 根據 2 的評價結果,從當前解中選擇一定數量的解作為基因操作物件。5 對所選擇的解進行基因操作 如交叉 變異等 得到一組新解,轉到 2 2 搜尋方法有三類 列...

計算機原理第二章

第2章計算機的邏輯部件 2.1數字邏輯電路基礎知識 2.2邏輯函式的化簡 2.3加法器設計 2.4解碼器設計 2.5計數器設計 2.6 eda技術 1.加法器 解碼器等常用晶元的邏輯功能 介紹了加法器 解碼器等中規模器件設計組合邏輯電路 解決實際問題的思路與方法。理解基本邏輯運算 邏輯運算規則 邏輯...