什么是tensor
- tensor是一个多维数组
一个单独的数据称为scalar(标量),shape是零维
一维的数据称为array(数组)
二维的数据称为matrix(矩阵)
>>> import torch
>>> scalar = torch.tensor(3)
>>> scalar.shape
>>> torch.Size([])
>>> array = torch.tensor([1, 2, 3])
>>> array.shape
>>> torch.Size([3])
>>> matrix = torch.tensor([[1, 2, 3], [4, 5, 6]])
>>> matrix.shape
>>> torch.Size([2, 3])
>>> scalar.ndim
>>> 0
>>> array.ndim
>>> 1
>>> matrix.ndim
>>> 2
- 对模型输入,输出,参数进行编码
深度学习模型的input,output,parameters均以tensor表示
-
可在GPU上运算(并行计算)
-
tensor与numpy数组共享内存(一个改变,另一个改变)
-
支持自动微分(autograd)
tensor的创建
由list创建tensor
import torch
# 由列表创建tensor
data = [
[1., 2],
[3, 4]
]
x_data = torch.tensor(data)
print(f'x_data: {x_data}')
print(f'type(x_data): {type(x_data)}')
print(f'x_data.dtype: {x_data.dtype}')
print(f'x_data.data: {x_data.data}')
请注意以上example code中data二维列表的data[0][0]元素为浮点类型。
由此创建的tensor为torch.float32类型
运行结果:
x_data: tensor([[1., 2.],
[3., 4.]])
type(x_data): <class 'torch.Tensor'>
x_data.dtype: torch.float32
x_data.data: tensor([[1., 2.],
[3., 4.]])
由numpy数组创建tensor
import torch
import numpy as np
data = np.random.normal(size=(2, 3))
x_data = torch.tensor(data)
print(f'x_data: {x_data}')
运行结果:
x_data: tensor([[ 0.6630, -1.6560, -1.0535],
[ 1.0881, -0.6041, 0.4296]], dtype=torch.float64)
由另一个tensor
import torch
import numpy as np
data = np.random.normal(size=(2, 3))
x_data = torch.tensor(data)
ones_like_data = torch.ones_like(x_data)
zeros_like_data = torch.zeros_like(x_data)
rand_like_data = torch.rand_like(x_data)
print(f'ones_like_data: {ones_like_data}')
print(f'zeros_like_data: {zeros_like_data}')
print(f'rand_like_data: {rand_like_data}')
rand_data = torch.rand(size=(2, 2))
print(rand_data)
运行结果:
ones_like_data: tensor([[1., 1., 1.],
[1., 1., 1.]], dtype=torch.float64)
zeros_like_data: tensor([[0., 0., 0.],
[0., 0., 0.]], dtype=torch.float64)
rand_like_data: tensor([[0.6290, 0.7816, 0.1809],
[0.8491, 0.4424, 0.5802]], dtype=torch.float64)
tensor([[0.5059, 0.3761],
[0.4400, 0.8277]])
tensor的一些属性
属性名 | 说明 |
---|---|
shape | 返回tensor的维度 |
ndim | 返回tensor的维度数 |
dtype | 返回tensor的数据类型 |
device | 返回tensor所在的设备 |
require_grad | 返回当前tensor是否需要梯度计算 |
import torch
import numpy as np
data = np.random.normal(size=(2, 3))
x_data = torch.tensor(data)
print(x_data.shape)
print(x_data.ndim)
print(x_data.dtype)
print(x_data.device)
print(x_data.requires_grad)
运行结果:
torch.Size([2, 3])
2
torch.float64
cpu
False
对于device属性,常常用以下操作,指定运行设备
device = 'cuda' if torch.cuda.is_available() else 'cpu'
print(device)