日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Pytorch常用操作

發布時間:2023/12/2 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Pytorch常用操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

創建tensor

x = torch.empty(*sizes)  #創建一個未初始化的tensor(后面用torch.nn.init中的一些函數進行初始化)

>>> torch.empty(2, 3) tensor(1.00000e-08 * [[ 6.3984, 0.0000, 0.0000], [ 0.0000, 0.0000, 0.0000]])

x = torch.rand(5, 3)  #返回一個范圍為[0,1)、size為5*3的矩陣

tensor([[0.3380, 0.3845, 0.3217],[0.8337, 0.9050, 0.2650],[0.2979, 0.7141, 0.9069],[0.1449, 0.1132, 0.1375],[0.4675, 0.3947, 0.1426]])

x = torch.zeros(5, 3, dtype=torch.long)

tensor([[0, 0, 0],[0, 0, 0],[0, 0, 0],[0, 0, 0],[0, 0, 0]])

x = torch.ones(5, 3, dtype=torch.double)

tensor([[1., 1., 1.],[1., 1., 1.],[1., 1., 1.],[1., 1., 1.],[1., 1., 1.]], dtype=torch.float64)

x = torch.tensor([5.5, 3])  #Construct a tensor directly from data

tensor([5.5000, 3.0000])

tensor運算

torch.mm(tensor1, tensor2, out=None)  #tensor的矩陣乘法matrix multiplication?

torch.mul(tensor1, tensor2, out=None)  #tensor的點乘Hadamard product

tensor相關操作

x.size()  #取tensor的size,返回的是tuple

z = x.view(-1, 8)  #和reshape功能一樣,只是參數少了一層括號

x = x.clamp(min, max)  #取最大最小值,和numpy.clip(a, a_min, a_max, out=None)類似

torch.max()

  torch.max(Tensor)  #對所有元素,取最大值,返回只有一個數的tensor

  torch.max(input, dim, keepdim=False, out=None)  #對dim維度上的元素取最大值,返回兩個tensor,第一個是dim上的最大值,第二個是最大值所在的位置(argmax)

torch.cat(seq, dim=0, out=None)  #concatenate,功能和numpy.concatenate((a1, a2, ...), axis=0, out=None)一樣,格式也恰好一樣

  一個技巧:inputs = torch.cat(inputs).view(len(inputs), 1, -1)  #先cat再view(reshape)

torch.stack( (a,b,c) ,dim = 2)  #建立一個新的維度,然后再在該緯度上進行拼接

  torch.stack VS torch.cat:cat是在已有的維度上拼接,而stack是建立一個新的維度,然后再在該緯度上進行拼接。

  用其實現 x.append(in_tensor) 的功能:先構造已經append好的x(此時x為list),然后x = torch.stack(x, dim = 0)

  可參考 https://blog.csdn.net/Teeyohuang/article/details/80362756

torch.unsqueeze(input, dim, out=None)  #給input(一個tensor)在dim維度上增加一個維度

>>> x = torch.tensor([1, 2, 3, 4]) >>> torch.unsqueeze(x, 0) tensor([[ 1, 2, 3, 4]]) >>> torch.unsqueeze(x, 1) tensor([[ 1], [ 2], [ 3], [ 4]])

b = a.numpy()  #torch tensor轉numpy array

b = torch.from_numpy(a)  #numpy array轉torch tensor(兩種轉都是沒有復制,而是直接引用的)

tensor_a , idx_sort = torch.sort(tensor_a, dim=0, descending=True)  #tensor排序,返回排序后的tensor和下標

tensor求導

x = torch.ones(2, 2, requires_grad=True)  #創建時設置requires_grad為True,將x看成待優化的參數(權重)

model.zero_grad()  #將每個權重的梯度清零(因為梯度會累加)

optimizer.zero_grad()  #當optimizer=optim.Optimizer(model.parameters())時,其與model.zero_grad()等效

loss.backward()  #求導,即對loss進行back propagation

optimizer.step()  #在back propagation后更新參數

定義神經網絡:

1. 定義網絡架構(模型的forward,通常用一個繼承自torch.nn.Module的類)

  __init__():將nn實例化(每一個nn都是一個類),參數自己定義

  forward(self, x):模型的forward,參數x為模型輸入

  self.add_module("conv", nn.Conv2d(10, 20, 4))  # self.conv = nn.Conv2d(10, 20, 4) 和這個增加module的方式等價

  torch.nn.Embedding(num_embeddings, embedding_dim, ...)  #是一個矩陣類,里面初始化了一個隨機矩陣,矩陣的長是字典的大小,寬是用來表示字典中每個元素的屬性向量,向量的維度根據你想要表示的元素的復雜度而定。類實例化之后可以根據字典中元素的下標來查找元素對應的向量。?

2. 定義輸入輸出

3. 定義loss(如果用nn需要實例化才定義,否則用functional直接在訓練中用)

4. 定義優化器

訓練:

1. 初始化,如model.zero_grad()將一些參數初始化為0

2. 準備好輸入

3. 將模型設置為train模式

4. 將模型forward

5.?計算loss和accuracy

6.?back propagation并計算權重的梯度

7.?做validation

8. 打印Epoch、loss、acc、time等信息

(不一定所有步驟都有,可以看情況省略部分)

驗證或測試:

1.?準備好輸入

2.?將模型設置為eval模式

3.?將模型forward

4.?計算loss和accuracy

5. 打印loss、acc等信息

(train和test相比,主要多了bp相關的,包括zero_grad()和backward()等)

?

torch.max(input,?dim,?keepdim=False,?out=None)?

轉載于:https://www.cnblogs.com/sbj123456789/p/9483760.html

總結

以上是生活随笔為你收集整理的Pytorch常用操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。