1.1 pytorch框架简介
Torch是一个开源的机器学习框架,在2002年发布了Torch的初代版本,Torch的编程语言为C和Lua。在2017年,Facebook推出了pytorch深度学习框架,主要编程语言为python。pytorch是Torch框架的一个端口(pytorch是torch的python版本)。常见的深度学习框架有:Theano、TensorFlow、keras、Caffe、pytorch等等,其中TensorFlow和pytorch是目前主流的深度学习框架。
1.2 创建tensor
tensor即"张量"(不是张亮麻辣烫),是一种数据结构(数据类型),是pytorch中最基础的运算单位。实际上,张量tensor与numpy数组(NDArray)类似,但pytorch中的tensor可以运行在GPU上,而numpy数组(NDArray)只能运行在CPU上,因此tensor加快了运算速度。张量tensor可以看作是一个多维数组。标量(scalar)可以看作0维张量,向量(vector)可以看作1维张量,矩阵可以看作2维张量。总而言之,tensor是一个可以运行在GPU上的多维数据。在Pytorch中,可利用torch.tensor()
和torch.Tensor()
生成新的张量。
torch.Tensor()
是python中的一个类,是torch.FloatTensor
的别名。torch.tensor()
是一个函数,函数原型是:torch.tensor(data, dtype=None, device=None, requires_grad=False)
。其中,data可以是:list、tuple、NumPy ndarray、scalar和其他类型。torch.tensor()会从data中的数据部分做拷贝(而不是直接引用),根据原始数据类型生成相应的torch.LongTensor、torch.FloatTensor和torch.DoubleTensor,或者根据dtype的值生成相应数据类型。
import torch
tensor1 = torch.tensor([1, 2, 3])
tensor2 = torch.Tensor([1, 2, 3])
print(tensor1)
print(tensor2)
输出:
tensor([1, 2, 3])
tensor([1., 2., 3.])
# torch.Tensor() 可以创建一个空的FloatTensor,使用torch.tensor()时则会报错。
tensor3 = torch.Tensor()
tensor4 = torch.tensor() # 会报错
1.3 查看tensor数据的维度(ndim、dim())、类型(dtype、type())、元素个数(numel())和大小(shape、size())
直接上代码
import torch
tens = torch.tensor([[1, 3, 5], [2, 4, 6]], dtype=float)
print(f"tens: {tens}")
print(f"dtype: {tens.dtype}") # 通过对象的属性dtype查看tens数据类型
print(f"ndim: {tens.ndim}") # 通过对象的属性ndim查看tens数据的维度
print(f"dim(): {tens.dim()}") # 通过对象的方法dim()查看tens数据的维度
print(f"shape: {tens.shape}") # 通过对象的属性shape查看tens的大小(形状)
print(f"size(): {tens.size()}") # 通过对象的方法size()查看tens的大小
print(f"type(): {tens.type()}") # 通过对象的方法type()查看tens数据类型
print(f"type(): {type(tens)}") # 通过内置函数type()查看tens数据类型
print(f"numel(): {tens.numel()}") # 通过对象的方法numel()查看tensor数据包含的元素个数
输出:
tens: tensor([[1., 3., 5.],
[2., 4., 6.]], dtype=torch.float64)
dtype: torch.float64
ndim: 2
dim(): 2
shape: torch.Size([2, 3])
size(): torch.Size([2, 3])
type(): torch.DoubleTensor
type(): <class 'torch.Tensor'>
numel(): 6