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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【Pytorch神经网络理论篇】 03 Pytorch快速上手(三)张量的数据操作

發布時間:2024/7/5 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Pytorch神经网络理论篇】 03 Pytorch快速上手(三)张量的数据操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 張量的數據操作

1.1 torch.reshape()實現數據維度變化

import torch a = torch.tensor([[1,2],[3,4]]) print(torch.reshape(a,(1,-1))) # 將其轉化為只有1行數據的張量,參數-1表示自動計算 # tensor([[1, 2, 3, 4]]) print(a.reshape((1,-1))) # # 將其轉化為只有1行數據的張量,參數-1表示自動計算 # tensor([[1, 2, 3, 4]]) print(a.view((1,-1))) # # 將其轉化為只有1行數據的張量,參數-1表示自動計算 # tensor([[1, 2, 3, 4]])

1.2 張量數據的矩陣轉置

import torch b = torch.tensor([[5,6,7],[2,8,0]]) # 定義二維張量 print(torch.t(b)) # 轉置矩陣 # 輸出 tensor([[5, 2], # [6, 8], # [7, 0]]) print(torch.transpose(b,dim0=1,dim1=0)) # 轉置矩陣,將原有數據的第1個維度切換到第0個維度 # 輸出 tensor([[5, 2], # [6, 8], # [7, 0]]) print(b.permute(1,0)) # 轉置矩陣,將原有數據的第1個維度切換到第0個維度 # 輸出 tensor([[5, 2], # [6, 8], # [7, 0]])

1.3 view()與contignous()方法

1.3.1 概述

view()只能作用于整塊內存上的張量,若對于非連續內存上的張量則不可以用該函數處理。也無法對transpose()與permute()等改變后的張量再進行變化。

view()需要與contiguous()進行連用,進而保證該張量在同一個內存塊中。

1.3.2 代碼

import torch b = torch.tensor([[5,6,7],[2,8,0]]) #定義二維張量 print(b.is_contiguous()) #判斷內存是否連續 # 輸出 True c = b.transpose(0,1) print(c.is_contiguous()) #判斷內存是否連續 # 輸出 False print(c.contiguous().is_contiguous()) #判斷內存是否連續 # 輸出 True print(c.contiguous().view(-1)) #判斷內存是否連續 # 輸出 tensor([5, 2, 6, 8, 7, 0])

1.4 torch.cat()數據拼接函數

1.4.1 概述

torch.cat()函數會實現將兩個張量沿著指定方向進行拼接===》在神經網絡中較為常見

1.4.2 代碼

import torch a = torch.tensor([[1,2],[3,4]]) #定義二維張量 b = torch.tensor([[5,6],[7,8]])print(torch.cat([a,b],dim=0)) #沿著0維度進行連接 # 輸出 tensor([[1, 2], # [3, 4], # [5, 6], # [7, 8]]) print(torch.cat([a,b],dim=1)) #沿著1維度進行連接 # 輸出 tensor([[1, 2, 5, 6], # [3, 4, 7, 8]])

1.5 torch.chunk()實現數據的均勻分割

1.5.1 概述

torch.chunk()將一個多維張量按照指定的維度和拆分數量進行分割,其返回值是元組,不可修改。

1.5.2 代碼

import torch a = torch.tensor([[1,2],[3,4]])print(torch.chunk(a,chunks=2,dim=0)) #將張量a按照第0維度分成兩個部分 # 輸出 (tensor([[1, 2]]), tensor([[3, 4]])) print(torch.chunk(a,chunks=2,dim=1)) #將張量a按照第1維度分成兩個部分 # 輸出 (tensor([[1],[3]]), tensor([[2],[4]]))

1.6?torch.split()實現數據的不均勻分割

import torch b = torch.tensor([[5,6,7],[2,8,0]]) #按照第1維度分成2個部分 ### split_size_or_sections 將按照指定的元素個數對張量數據進行數據拆分,不滿足個數的剩余數據將會作為分割數據的最后一部分 print(torch.split(b,split_size_or_sections=(1,2),dim=1) ) # 輸出 (tensor([[5],[2]]), tensor([[6, 7],[8, 0]]))

1.7?torch.gather()對張量數據進行檢索

1.7.1 概述

torch.gather()對于張量數據中的值按照指定的索引與順序進行排列,index參數必須是張量類型,要與輸入的維度相同

1.7.2 代碼

import torch b = torch.tensor([[5,6,7],[2,8,0]]) # 沿著第1維度,按照index的形狀進行取值排列 print(torch.gather(b,dim=1,index=torch.tensor([[1,0],[1,2]]))) #輸出 tensor([[6, 5],[8, 0]])# 沿著第0維度,按照index的形狀進行取值排列 print(torch.gather(b,dim=0,index=torch.tensor([[1,0,0]]))) #輸出 tensor([[2, 6, 7]])print(torch.index_select(b,dim=0,index=torch.tensor(1))) #取出整行或者整列 #輸出 tensor([[2, 8, 0]])

1.8?按照指定的閾值對于張量數據進行過濾展示

1.8.1 概述

torch.gt():大于

torch.ge():大于或等于

torch.lt():小于

torch.le():小于或等于

1.8.2 代碼

import torch b = torch.tensor([[1,2],[2,8]]) mask = b.ge(2) #大于或者等于2 print(mask) # 輸出 tensor([[False, True], # [ True, True]]) print(torch.masked_select(b,mask)) # 輸出 tensor([2, 2, 8])

1.9 找出張量中的非零數值的索引

import torch eye = torch.eye(3) # 生成一個對角矩陣 print(eye) # 輸出 tensor([[1., 0., 0.], # [0., 1., 0.], # [0., 0., 1.]]) print(torch.nonzero(eye)) # 找出對角矩陣中的非零值索引 # 輸出 tensor([[0, 0], # [1, 1], # [2, 2]])

1.10 根據條件實現對張量的數值取值

import torch b = torch.tensor([[5,6,7],[2,8,0]]) c = torch.ones_like(b) #生成數值均為1的矩陣 print(c) # 輸出 tensor([[1, 1, 1], # [1, 1, 1]]) print(torch.where(b>5,b,c)) #將b中大于5的元素提取出來,值不大于5的部分從c中取得 # 輸出 tensor([[1, 6, 7], # [1, 8, 1]])

1.11 根據閾值進行數據截斷

1.11.1 概述

根據閾值進行數據截斷===》用于梯度計算中,為梯度設置一個固定的閾值,避免訓練過程中的梯度爆炸。

梯度爆炸:模型每次訓練的調整值變得很大,最終導致訓練結果難以收斂。

1.11.2 代碼

import torch a = torch.tensor([[1,2],[3,4]]) b = torch.clamp(a,min=2,max=3) #按照最小值2,最大值3進行截斷 print(b) # 輸出 tensor([[2, 2], # [3, 3]])

1.12 獲取數據中的最大值、最小值索引

1.12.1 概述

torch.argmax():返回最大索引

torch.argmin():返回最小索引

1.12.2 代碼

import torch a = torch.tensor([[1,2],[3,4]]) print(torch.argmax(a,dim=0)) # 按照第0維度找出最大索引值 # 輸出 tensor([1, 1]) print(torch.argmin(a,dim=1)) # 按照第1維度找出最小索引值 # 輸出 tensor([0, 0]) print(torch.max(a,dim=0)) # 按照第0維度找出最大索引值與對應數值 # 輸出 torch.return_types.max(values=tensor([3, 4]),indices=tensor([1, 1])) print(torch.min(a,dim=1)) # 按照第1維度找出最小索引值與對應數值 # 輸出 torch.return_types.min(values=tensor([1, 3]),indices=tensor([0, 0]))

總結

以上是生活随笔為你收集整理的【Pytorch神经网络理论篇】 03 Pytorch快速上手(三)张量的数据操作的全部內容,希望文章能夠幫你解決所遇到的問題。

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