本文重点
从本节课程开始我们将正式开启pytorch的学习了,在深度学习框架中有一个重要的概念叫做张量,它是pytorch的基本操作单位,要想创建tensor有很多的方式,但是有两个torch.tensor和torch.Tensor容易混淆,本节课程对二者进行总结。
二者的区别
torch.Tensor是默认的tensor类型(torch.FloatTensor)的简称,它是一个类,也就是说使用它只能创建torch.FloatTensot类型
torch.tensor是一个方法,它根据参数data创建Tensor,Tensor类型根据数据进行推断,也就是说当我们没有指定dtype使用它创建的类型和data一致,
torch.tensor(data, dtype=None, device=None, requires_grad=False)
二者接收的参数(一致性)
二者均可以接收list(列表),tuple(元组),array(numpy数组),此时二者可能表示的类型不同之外,其它的所有的都是一样的。
tensor
a=torch.tensor((1,2))#元组
print(a)
print(a.type())
print(a.dim())
print(a.shape)
a=torch.tensor([1,2])#列表
print(a)
print(a.type())
print(a.dim())
print(a.shape)
a=torch.tensor(np.array([1,2]))#数组
print(a)
print(a.type())
print(a.dim())
print(a.shape)
我们可以看到它们的输出都是tensor([1,2]),然后类型都是torch.LongTensor,dim都是1,表示1维,shape都是torch.Size([2])表示一维中有两个元素。
Tensor
a=torch.Tensor((1,2))
print(a)
print(a.type())
print(a.dim())
print(a.shape)
a=torch.Tensor([1,2])
print(a)
print(a.type())
print(a.dim())
print(a.shape)
a=torch.Tensor(np.array([1,2]))
print(a)
print(a.type())
print(a.dim())
print(a.shape)
我们可以看到它的类型是torch.FloatTensor,这是因为Tensor默认是FloatTensor,其它的和tensor是一样的。
二者接收的参数(不一致性)
参数是一个数字
a=torch.tensor(2)#标量
print(a)
print(a.dim())
print(a.type())
print(a.shape)
a=torch.Tensor(2)
print(a)
print(a.dim())
print(a.type())
print(a.shape)
当参数是一个数字的时候,tensor就创建一个标量,而Tensor认为要创建一个一维张量,里面有两个元素,这就是二者的不同,所以下面的代码一个会正确执行,另外一个会报错。
a=torch.tensor(2.)#标量
print(a)
print(a.dim())
print(a.type())
print(a.shape)
a=torch.Tensor(2.)#出错
print(a)
print(a.dim())
print(a.type())
print(a.shape)
也就是说当传递一个单数值的时候,Tensor只能接收一个整数,表示一维张量中元素有几个
参数是多个数字
import torch
import numpy as np
a=torch.Tensor(2,3,4)
print(a)
print(a.dim())
print(a.type())
print(a.shape)
a=torch.tensor(2,3,4)#标量
print(a)
print(a.dim())
print(a.type())
print(a.shape)
当我们传递多个参数的时候,Tensor认为是创建多维度的,而tensor会报错,之所以这样是因为tensor函数为
torch.tensor(data, dtype=None, device=None, requires_grad=False)
只能接收一个参数就是data
创建空的tensor
import torch
import numpy as np
a=torch.Tensor()
print(a)
a=torch.tensor(())
print(a)