文章目录
个人学习总结,持续更新中……
参考文献
[1] pytorch自动求导Autograd系列教程(一)
张量创建
torch.tensor(array_like)方法
torch.tensor()仅仅是python函数,函数原型是:
tensor(data, dtype=None, device=None, requires_grad=False) -> Tensor
参数:
data: (array_like): tensor的初始值. 可以是列表,元组,numpy数组,标量等;
dtype: tensor元素的数据类型
device: 指定CPU或者是GPU设备,默认是None
requires_grad:是否可以求导,即求梯度,默认是False,即不可导的
torch.tensor会从data中的数据部分做拷贝(而不是直接引用),根据原始数据类型生成相应的torch.LongTensor、torch.FloatTensor和torch.DoubleTensor。
import torch
'''
def tensor(data: Any,
dtype: Optional[_dtype] = None,
device: Union[_device, str, None] = None,
requires_grad: _bool = False) -> Tensor
'''
import torch
a = torch.tensor(data=[[1., 2.], [3., 4.]], dtype=torch.float, device='cpu', requires_grad=True)
print(a)
'''
tensor([[1., 2.],
[3., 4.]], requires_grad=True)
'''
print(a.dtype)
# torch.float32
print(a.type())
# torch.FloatTensor
print(a.device)
# cpu
print(a.requires_grad)
# True
torch.Tensor()
torch.Tensor(n, m)方法
torch.Tensor()是python类,更明确地说,是默认张量类型torch.FloatTensor()的别名,torch.Tensor([1,2])会调用Tensor类的构造函数__init__,生成单精度浮点类型的张量。
其他类似的有:torch.DoubleTensor(n, m)、torch.LongTensor(n, m)等。
最基础的Tensor()函数创建方法,参数为Tensor的每一维大小。
import torch
# 最基础的Tensor()函数创建方法,参数为Tensor的每一维大小
a = torch.Tensor(2, 2)
print(a)
'''
tensor([[0., 0.],
[0., 0.]])
'''
print(a.dtype)
# torch.float32
print(a.type())
# torch.FloatTensor
print(a.device)
# cpu
print(a.requires_grad)
# False
torch.Tensor(array_like)
import torch
# 使用Python的list序列进行创建
a = torch.Tensor([[1, 2], [3, 4]],device='cpu')
print(a)
'''
tensor([[1., 2.],
[3., 4.]])
'''
print(a.dtype)
# torch.float32
print(a.type())
# torch.FloatTensor
print(a.device)
# cpu
print(a.requires_grad)
# False
张量类型
Torch defines 10 tensor types with CPU and GPU variants which are as follows:
Data type | dtype | CPU tensor | GPU tensor |
---|---|---|---|
32-bit floating point | torch.float32 or torch.float | torch.FloatTensor | torch.cuda.FloatTensor |
64-bit floating point | torch.float64 or torch.double | torch.DoubleTensor | torch.cuda.DoubleTensor |
16-bit floating point 1 | torch.float16 or torch.half | torch.HalfTensor | torch.cuda.HalfTensor |
16-bit floating point 2 | torch.bfloat16 | torch.BFloat16Tensor | torch.cuda.BFloat16Tensor |
32-bit complex | torch.complex32 | ||
64-bit complex | torch.complex64 | ||
128-bit complex | torch.complex128 or torch.cdouble | ||
8-bit integer (unsigned) | torch.uint8 | torch.ByteTensor | torch.cuda.ByteTensor |
8-bit integer (signed) | torch.int8 | torch.CharTensor | torch.cuda.CharTensor |
16-bit integer (signed) | torch.int16 or torch.short | torch.ShortTensor | torch.cuda.ShortTensor |
32-bit integer (signed) | torch.int32 or torch.int | torch.IntTensor | torch.cuda.IntTensor |
64-bit integer (signed) | torch.int64 or torch.long | torch.LongTensor | torch.cuda.LongTensor |
Boolean | torch.bool | torch.BoolTensor | torch.cuda.BoolTensor |
quantized 8-bit integer (unsigned) | torch.quint8 | torch.ByteTensor | |
quantized 8-bit integer (signed) | torch.qint8 | torch.CharTensor | |
quantized 32-bit integer (signed) | torch.qfint32 | torch.IntTensor | |
quantized 4-bit integer (unsigned) 3 | torch.quint4x2 | torch.ByteTensor |