1、張量(Tensor)
張量的英文是 Tensor, 它是 PyTorch 裏基礎的運算單位, 與 Numpy 的 ndarray 相同表示的是一個多維矩陣。與 ndarray 的最大區別就在於,PyTorch 的 Tensor 可以在 GPU 上運行,而 numpy 的 ndarray 只能在 CPU 上運行,在 GPU 上運行大大加快了運算速度。
(1)、首先要引入相關的包;
(2)、生成一個簡單的張量;
注:rand() 函數的作用:
以給定的形狀(取決於 rand函數的參數設置)創建一個數組,並在數組中加入在[0, 1] 之間均勻分佈的隨機樣本。
與randn() 函數的區別:
randn() 函數以給定的形狀創建一個數組,數組元素符合標準正態分佈(0, 1)。
(3)、查看張量(矩陣)的大小;
- 可以使用 shape 屬性查看;
x.shape;
- 可以使用 size() 函數,返回結果;
x.size();
張量 (Tensor) 是一個定義在一些向量空間和一些對偶空間的笛卡爾積上的多重線性映射,其座標是 [n] 維空間內,有 [n] 個分量的一種量,其中每個分量都是座標的函數,而在座標變換時,這些分量也依照某些規則做線性變換。 R 稱爲該張量的秩或階 (與矩陣的秩和階均無關係)。
(4)、生成一些多維的張量;
解釋:
- torch.rand(2, 3, 4, 5) 生成的多維矩陣,你可以把它想象成一個文件夾下面存放了一些圖片,究竟是什麼樣的圖片呢?數量有多少?
2 --- 表示這個文件夾裏面存放圖片的數量;
3 --- 表示這張圖片的通道數,比如(R、G、B);
4, 5 --- 表示這張圖片的大小 4 *5;
- 在同構的意義下,第零階張量 (r = 0) 爲標量(Scalar), 第一階張量 (r =1) 爲向量(vector) ,第二階張量( r = 2)爲 矩陣,第三階以上的統稱爲多維張量。
理解:
r = 0, 標量(Scalar)其實就是一個實數,如 a, b….
r = 1, 向量(Vector) 又稱爲矢量,是一個一維數組,如 x = 𝑎𝑏𝑐𝑑
r = 2, 矩陣(matrix)是一個二維數組,如 x = 𝑎𝑏𝑐𝑑
r = 3 , 張量其實就是標量、向量和矩陣在多維空間( r >= 3) 中的推廣,即多維數組。如: x =
(5)、生成一個標量;
對於標量直接使用 .item() 從中取出對應 的 python 對象的數值
(6)、生成一個元素的張量;
ps: 注意對比生成標量和生成一個元素張量的不同
對於只有一個元素的張量也可以使用 .item() 取 Python 對象的值
2、基本類型
- 整型:
64位:torch.LongTensor.
將 tensor 轉換成 64 位整型
32位:torch.FloatTensor.
將 tensor 轉換成 32 位整型
16位:torch.IntTensor.
將 tensor 轉換成 16 位整型
- 浮點型:
64位: torch.DoubleTensor.
將 tensor 轉換成 64 位浮點型
32位 :torch.FloatTensor.
將 tensor 轉換成 32 位 浮點型
- Char 字符型:torch.CharTensor.
將 tensor 轉換成 char 型
- byte 字節型:torch. ByteTensor.
將 tensor 轉換成 byte 型
3、Numpy 轉換
- 使用 numpy 方法將 Tensor 轉化爲 ndarray
- 將 numpy 轉化成 Tensor
Tensor 和 numpy 對象共享內存,所以他們之間的轉換很快,而且幾乎不會消耗什麼資源。但這也意味着,如果其中一個變了,另外一個也會隨之改變。
4、設備間的轉換
一般情況下可以使用 cuda 方法將 tensor 移動到 gpu, 這步操作需要 cuda 設備支持
- 在 cpu 上隨機生成一個數組,並在數組中加入 [0,1] 之間的均勻分佈隨機樣本
- 將 tensor 從 cpu 上移動到 gpu 上
- 使用 .cpu() 方法將 tensor 移動到 cpu 上
5、初始化
- 初始化,使用 [0,1] 均勻分佈隨機初始化二位數組
- 初始化,使用 1 填充
- 初始化,使用 0 填充
- 初始化,對角線爲 1,其他爲 0
6、張量操作常用方法
PyTorch 中對張量的操作 api 和 Numpy 非常相似,如果熟悉 Numpy 中的操作,那麼他們二者基本一致;
- 生成標準的正態分佈的二維數組
- 沿着行取最大值
- 每行求和
- 矩陣 a + b
- 以 _ 爲結尾的,均會改變調用值