Pytorch(2)-tensor常用操作

tensor常用數學操作

  • 1. 隨機數
    • 1.1 torch.rand() - 均勻分布數字
    • 1.2 torch.randn() - 正態分布數字
  • 2. 求和
    • 2.1 torch.sum(data, dim)
    • 2.2 numpy.sum(data, axis)
  • 3. 求積
    • 3.1 點乘--對應位置相乘
    • 3.2 矩陣乘法
  • 4. 均值、方差
    • 4.1 torch tensor.mean() .std()
    • 4.2 numpy array.mean() .std()
    • 4.3 numpy 與torch .std()計算公式差別
  • 5 求冪運算--torch.pow()
  • 6. tensor 取值
    • 6.1 scaler.item()
    • 6.2 tensor.tolist()
  • 7. 降升維
    • 7.1 torch.squeeze() 降維
    • 7.2 torch.unsqueeze() 升維
  • 8. 最大/最小/非零 值索引
    • 8.1 tensor.argmax()
    • 8.2 tensor.argmin()
    • 8.3 tensor.nonzero()
  • 9. 矩陣拼接
    • 9.1 torch.cat((a, b, c), dim )
    • 9.2 numpy.concatenate((a,b), axis)
  • 10. 矩陣拉伸
    • 10.1 torch.flatten()
    • 10.2 numpy.matrix.flatten

import torch

1. 隨機數

1.1 torch.rand() - 均勻分布數字

產生大小指定的,[0,1)之間的均勻分布的樣本.

> torch.rand(2,3)
>>tensor([[0.0270, 0.9856, 0.6599],[0.2237, 0.3888, 0.4566]])
> torch.rand(3,1)
>>tensor([[0.1268],[0.3370],[0.5097]])

1.2 torch.randn() - 正態分布數字

產生大小為指定的,正態分布的采樣點,數據類型是tensor

> torch.randn(4)
>>tensor([-2.1436,  0.9966,  2.3426, -0.6366])>torch.randn(2, 3)
>>tensor([[ 1.5954,  2.8929, -1.0923],[ 1.1719, -0.4709, -0.1996]])

2. 求和

2.1 torch.sum(data, dim)

>>> a=torch.ones(2,3)
>>> a
tensor([[1., 1., 1.],[1., 1., 1.]])
# 按行求和
>>> b=torch.sum(a,1)		# 每列疊加,按行求和
>>> b
tensor([3., 3.])
>>> b.size()
torch.Size([2])
# 按列求和
>>> d=torch.sum(a,0)		# 每行疊加,按列求和
>>> d
tensor([2., 2., 2.])
>>> d.size()				
torch.Size([3])

2.2 numpy.sum(data, axis)

>>> import numpy as np
>>> np.sum([[0, 1], [0, 5]], axis=0)  #每行疊加,按列求和
array([0, 6])
>>> np.sum([[0, 1], [0, 5]], axis=1)  
array([1, 5])

3. 求積

3.1 點乘–對應位置相乘

數組和矩陣對應位置相乘,輸出與相乘數組/矩陣的大小一致

np.multiply()
torch直接用* 就能實現

3.2 矩陣乘法

矩陣乘法:兩個矩陣需要滿足一定的行列關系

torch.matmul(tensor1, tensor2)
numpy.matmul(array1, array2)

4. 均值、方差

4.1 torch tensor.mean() .std()

>a.mean()  # a為Tensor型變量
>a.std()>torch.mean(a)  # a為Tensor型變量
>torch.std(a)>>> torch.Tensor([1,2,3,4,5])
tensor([1., 2., 3., 4., 5.])
>>> a=torch.Tensor([1,2,3,4,5])
>>> a.mean()
tensor(3.)
>>> torch.mean(a)
tensor(3.)
>>> a.std()
tensor(1.5811)
>>>> torch.std(a)
tensor(1.5811)       # 注意和numpy求解的區別

torch.mean(input) 輸出input 各個元素的的均值,不指定任何參數就是所有元素的算術平均值,指定參數可以計算每一行或者 每一列的算術平均數

> a = torch.randn(4, 4)
>>tensor([[-0.3841,  0.6320,  0.4254, -0.7384],[-0.9644,  1.0131, -0.6549, -1.4279],[-0.2951, -1.3350, -0.7694,  0.5600],[ 1.0842, -0.9580,  0.3623,  0.2343]])
# 每一行的平均值
> torch.mean(a, 1, True)  #dim=true,計算每一行的平均數,輸出與輸入有相同的維度:兩維度(4,1)
>>tensor([[-0.0163],[-0.5085],[-0.4599],[ 0.1807]])> torch.mean(a, 1)   # 不設置dim,默認計算每一行的平均數,內嵌了一個torch.squeeze(),將數值為1的維度壓縮(4,)
>>tensor([-0.0163, -0.5085, -0.4599,  0.1807])

4.2 numpy array.mean() .std()

>a.mean()  # a為np array型變量
>a.std()>numpy.mean(a)   # a為np array型變量
>numpy.std(a)
>>> import numpy
>>> c=numpy.array([1,2,3,4,5])
>>> c.mean()
3.0
>>> numpy.mean(c)
3.0
>>> c.std()
1.4142135623730951
>>> numpy.std(c)
1.4142135623730951>>> d=numpy.array([1,1,1,1])
>>> d.mean()
1.0
>>> d.std()
0.0

4.3 numpy 與torch .std()計算公式差別

numpy:
std=1N∑i=1N(xi?x ̄)2std=\sqrt{\frac{1}{N}\sum_{i=1}^N(x_i-\overline{x})^2}std=N1?i=1N?(xi??x)2?

torch:
std=1N?1∑i=1N(xi?x ̄)2std=\sqrt{\frac{1}{N-1}\sum_{i=1}^N(x_i-\overline{x})^2}std=N?11?i=1N?(xi??x)2?

5 求冪運算–torch.pow()

對輸入的每分量求冪次運算

>>> a = torch.randn(4)
>>> a
tensor([ 0.4331,  1.2475,  0.6834, -0.2791])
>>> torch.pow(a, 2)
tensor([ 0.1875,  1.5561,  0.4670,  0.0779])>>> exp = torch.arange(1., 5.)
>>> a = torch.arange(1., 5.)
>>> a
tensor([ 1.,  2.,  3.,  4.])
>>> exp
tensor([ 1.,  2.,  3.,  4.])
>>> torch.pow(a, exp)
tensor([   1.,    4.,   27.,  256.])

和numpy中的numpy.power()作用類似。

6. tensor 取值

6.1 scaler.item()

一個Tensor調用.item()方法就可以返回這個Tensor 對應的標準python 類型的數據.注意事項,只針對一個元素的標量.若是向量,可以調用tolist()方法.
在這里插入圖片描述在低版本的torch中tensor沒有.item()屬性,那么直接用[0]訪問其中的數據.

>>> import torch
>>>c=torch.tensor([2.5555555])
>>> c2.5556
[torch.FloatTensor of size 1]
>>> c[0]
2.555555582046509
>>> round(c[0],3)
2.556

6.2 tensor.tolist()

(略)

7. 降升維

7.1 torch.squeeze() 降維

將輸入所有為1的維度去除(2,1)-> (2,)(以行向量的形式存在)

torch.squeeze(input, dim=None, out=None)

> x = torch.zeros(2, 1, 2, 1, 2)
> x.size()
>>torch.Size([2, 1, 2, 1, 2])
>
> y = torch.squeeze(x)
> y.size()
>>torch.Size([2, 2, 2])

7.2 torch.unsqueeze() 升維

Returns a new tensor with a dimension of size one inserted at the specified position)
給數據增加一維度,常看到數據的維度為.size([])懵逼了,在后續計算的時候會造成問題。所以需要給數據升維度。

> 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]])

8. 最大/最小/非零 值索引

8.1 tensor.argmax()

tensor.argmax(dim)

返回tensor最大的值對應的index。dim 不設置-全部元素的最大值,dim = 0 每列的最大值,dim = 1每行的最大值。

>>> a = torch.randn(3,4)
>>> a
tensor([[ 1.1360, -0.5890,  1.8444,  0.6960],[ 0.3462, -1.1812, -1.5536,  0.4504],[-0.4464, -0.5600, -0.1655,  0.3914]])
>>> a.argmax()
tensor(2)               # 按行拉成一維向量,對應的小次奧
>>> a.argmax(dim = 0)
tensor([0, 2, 0, 0])    # 每一列最大值的索引
>>> a.argmax(dim = 1)
tensor([2, 3, 3])       # 每一行最大值索引

8.2 tensor.argmin()

與tensor.argmax() 用法相同,在多分類問題求準確率時會用到。

output_labels = outputs.argmax(dim = 1)
train_acc = (output_labels == labels).float().mean()

8.3 tensor.nonzero()

返回非零元素對應的下標

>>> a = torch.tensor([[1,0],[0,3]])
>>> a.nonzero()
tensor([[0, 0],[1, 1]])
>>> a= torch.tensor([1,2,3,0,4,5,0])
>>> a.nonzero()
tensor([[0],[1],[2],[4],[5]])

9. 矩陣拼接

9.1 torch.cat((a, b, c), dim )

>>> x = torch.randn(2, 3)
>>> x
tensor([[ 0.6580, -1.0969, -0.4614],[-0.1034, -0.5790,  0.1497]])
>>> torch.cat((x, x, x), 0)
tensor([[ 0.6580, -1.0969, -0.4614],[-0.1034, -0.5790,  0.1497],[ 0.6580, -1.0969, -0.4614],[-0.1034, -0.5790,  0.1497],[ 0.6580, -1.0969, -0.4614],[-0.1034, -0.5790,  0.1497]])
>>> torch.cat((x, x, x), 1)
tensor([[ 0.6580, -1.0969, -0.4614,  0.6580, -1.0969, -0.4614,  0.6580,-1.0969, -0.4614],[-0.1034, -0.5790,  0.1497, -0.1034, -0.5790,  0.1497, -0.1034,-0.5790,  0.1497]])

9.2 numpy.concatenate((a,b), axis)

>>> a = np.array([[1, 2], [3, 4]])
>>> b = np.array([[5, 6]])
>>> np.concatenate((a, b), axis=0)
array([[1, 2],[3, 4],[5, 6]])
>>> np.concatenate((a, b.T), axis=1)
array([[1, 2, 5],[3, 4, 6]])
>>> np.concatenate((a, b), axis=None)
array([1, 2, 3, 4, 5, 6])

10. 矩陣拉伸

10.1 torch.flatten()

矩陣按行展開:

>>> t = torch.tensor([[[1, 2],[3, 4]],[[5, 6],[7, 8]]])
>>> torch.flatten(t)
tensor([1, 2, 3, 4, 5, 6, 7, 8])
>>> torch.flatten(t, start_dim=1)
tensor([[1, 2, 3, 4],[5, 6, 7, 8]])

10.2 numpy.matrix.flatten

>>> m = np.matrix([[1,2], [3,4]])
>>> m.flatten()
matrix([[1, 2, 3, 4]])
>>> m.flatten('F')
matrix([[1, 3, 2, 4]])

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445302.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445302.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445302.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java編程規約(OOP)

1、【強制】避免通過一個類的對象引用訪問此類的靜態變量或靜態方法,無謂增加編譯器解析 成本,直接用類名來訪問即可。 2、【強制】所有的覆寫方法,必須加Override 注解。 說明:getObject()與 get0bject()的問題。一個是字母的…

深度學習(07)-- 經典CNN網絡結構(Inception (v1-v4))

文章目錄目錄1.Inception介紹1.1 Inception結構1.2 Inception V1(GoogleNet)1.3 Inception V2(Batch Norm)1.4 Inception V3(Factorization)1.5 Inception V4(ResNet)1.5 Inception v1~v4 總結1.6 Inception進階2.Inception實現目…

Python(13)-函數,lambda語句

函數1 函數定義2 函數調用3 函數注釋文檔4 函數參數4.1 參數列表,默認參數,任意參數4.1.1 無缺省值參數4.1.2(部分)缺省值參數4.1.3 數量不定形參數4.2 可變對象和不可變對象4.3 作用域4.3.1 globals()函數4.3.2 global 聲明變量為全局變量5 函數返回值5…

深度學習(08)-- Residual Network (ResNet)

文章目錄目錄1.殘差網絡基礎1.1基本概念1.2VGG19、ResNet34結構圖1.3 梯度彌散和網絡退化1.4 殘差塊變體1.5 ResNet模型變體1.6 Residual Network補充1.7 1*1卷積核(補充)2.殘差網絡介紹(何凱明)3.ResNet-50(Ng)3.1 非常深的神經網…

Python(14)-模塊

模塊Python標準庫,第三方庫都是一個個模塊,我們還可以編寫自己的模塊。模塊python程序架構的核心模塊,模塊是一個工具包。 每一個以.py為擴展名的源代碼文件都是一個模塊。 想要使用工具包中的工具,可以使用Import的方式導入。 …

redis——命令請求的執行過程

發送命令請求 當用戶在客戶端中鍵入一個命令請求時, 客戶端會將這個命令請求轉換成協議格式, 然后通過連接到服務器的套接字, 將協議格式的命令請求發送給服務器。 讀取命令請求 當客戶端與服務器之間的連接套接字因為客戶端的寫入而變得可…

深度學習(09)-- DenseNet

文章目錄目錄1.DenseNet網絡結構2.稠密連接及其優點3.代碼實現4.補充說明目錄 1.DenseNet網絡結構 2.稠密連接及其優點 每層以之前層的輸出為輸入,對于有L層的傳統網絡,一共有L個連接,對于DenseNet,則有L*(L1)/2。 這篇論文主要…

redis——緩存擊穿/穿透/雪崩

緩存穿透 一般的緩存系統,都是按照key去緩存查詢,如果不存在對應的value,就去后端系統查找(比如DB)。 一些惡意的請求會故意查詢不存在的key,請求量很大,就會對后端系統造成很大的壓力。這就叫做緩存穿透…

python(15)-window7配置iPython

前提:安裝了Pythonanaconda anaconda安裝參考:https://www.zhihu.com/question/58033789 在window系統下可以使用兩種方法來實現類似與于Linux終端命令運行程序的方法(推薦方式2): 1.cmd:自己沒有操作過,可以參考下面…

深度學習(10)-- Capsules Networks(CapsNet)

版權聲明&#xff1a;本文為博主原創文章&#xff0c;未經博主允許不得轉載。 https://blog.csdn.net/malele4th/article/details/79430464 </div><div id"content_views" class"markdown_views"><!-- flowchart 箭頭圖標 勿刪 --&g…

手把手maven的功能/安裝/使用/idea集成

看這篇文章不用著急安裝&#xff0c;跟著步驟一定會成功&#xff0c;要理解maven是什么&#xff0c;如何使用。 介紹 maven官網 對于一個小白來說&#xff0c;官網有用的信息就是這些 不管如何介紹maven&#xff0c;作為使用者來說&#xff0c;主要感覺兩個方面有幫助&#x…

python(16)-列表list,for循環

高級數據類型--列表1列表定義2列表中取值3列表的增&#xff0c;刪&#xff0c;查&#xff0c;改3.1修改指定位置的數據3.2確定指定元素的索引3.3增加操作3.4刪除操作3.5 元素是否存在與列表中 in3.6在指定索引位置插入元素4列表的數據統計5列表排序6列表的循環遍歷-for7多維度l…

深度學習(11)-- GAN

TensorFlow &#xff08;GAN&#xff09; 目錄 TensorFlow &#xff08;GAN&#xff09;目錄1、GAN1.1 常見神經網絡形式1.2 生成網絡1.3 新手畫家 & 新手鑒賞家1.4 GAN網絡1.5 例子 1、GAN 今天我們會來說說現在最流行的一種生成網絡, 叫做 GAN, 又稱生成對抗網絡, 也…

Python外(1)--try-expect

語法&#xff1a; try:正常情況下執行的代碼塊 expect 錯誤類型1:&#xff08;可選&#xff09;錯誤類型1對應的處理方案 expect 錯誤類型2:&#xff08;可選&#xff09;錯誤類型2對應的處理方案 expect:剩下的錯誤類型對應的處理方案 else:&#xff08;可選&#xff09;沒有…

redis——數據結構和對象的使用介紹

redis官網 微軟寫的windows下的redis 我們下載第一個 額案后基本一路默認就行了 安裝后&#xff0c;服務自動啟動&#xff0c;以后也不用自動啟動。 出現這個表示我們連接上了。 redis命令參考鏈接 String 字符串結構 struct sdshdr{//記錄buf數組中已使用字節的數量int …

Python模塊(1)-Argparse 簡易使用教程

argparse 簡易使用教程1.概況2. action3. argparse 使用demo3.1 argparse 實現加法器3.2 D-Model parser1.概況 argparse是Python中用于解析命令行參數的一個模塊&#xff0c;可以自動生成help和usage信息&#xff1b;當從終端輸入的參數無效時&#xff0c;模塊會輸出提示信息…

深度學習--Keras總結

Keras主要包括14個模塊&#xff0c;本文主要對Models、layers、Initializations、Activations、Objectives、Optimizers、Preprocessing、metrics共計8個模塊分別展開介紹&#xff0c;并通過一個簡單的Bp神經網絡說明各個模塊的作用。 1. Model 包&#xff1a;keras.models …

redis——NOSQL及redis概述

NoSql入門概述 單機Mysql的美好時代 瓶頸&#xff1a; 數據庫總大小一臺機器硬盤內存放不下數據的索引&#xff08;B tree&#xff09;一個機器的運行內存放不下訪問量&#xff08;讀寫混合&#xff09;一個實例不能承受Memcached&#xff08;緩存&#xff09; MySql 垂直拆…

Python(17)-元組tuple

高級數據類型--元組1.元組的定義2.元組基本操作3.元組的循環遍歷4.元組的應用場景5.元組與格式化字符串6.元組與列表之間的轉換元組的最大特征就是可訪問不可改&#xff0c;可作為字典的鍵值&#xff0c;因為鍵值必須是唯一的。字符串也是不可邊類型&#xff0c;因此也適合做字…

深度學習(莫煩 神經網絡 lecture 3) Keras

神經網絡 & Keras 目錄 神經網絡 & Keras目錄1、Keras簡介1.1 科普: 人工神經網絡 VS 生物神經網絡1.2 什么是神經網絡 (Neural Network)1.3 神經網絡 梯度下降1.4 科普: 神經網絡的黑盒不黑1.5 Why Keras?1.6 兼容 backend 2、如何搭建各種神經網絡2.1 Regressor回歸…