pytorch官方文档
创建tensor
- 首先,我们需要明确一下,torch.Tensor()是python类,更明确地说,是默认张量类型torch.FloatTensor()的别名,torch.Tensor([1,2])会调用Tensor类的构造函数__init__,固定地生成单精度浮点类型的张量
a=torch.Tensor([1,2])
print(a)#tensor([1., 2.])
print(a.type())#torch.FloatTensor
- 而torch.tensor()仅仅是python函数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张量。
device=torch.device('cuda' if torch.cuda.is_available() else 'cpu')
b=torch.tensor([1,2])
print(b)#tensor([1, 2])
print(b.type())#torch.LongTensor
b=torch.tensor([1,2],device=device,dtype=torch.float32)#放GPU上
print(b.type())#torch.cuda.FloatTensor
- 同样tensor可以做一些运算 举例只是部分
#
#切片索引
tensor=torch.ones(4,4)
tensor[:,1]=0 #每一行的第一列为0
#连接
t1=torch.cat([tensor,tensor,tensor],dim=1)
#数字乘
print(tensor.mul(3))
#矩阵乘
print(tensor.matmul(tensor))
#加法
print(tensor.add_(4))
#数据的转换
- numpy与tensor互相转换
t=torch.tensor([1,2,3])
t_numpy=t.numpy()
print(type(t_numpy))#<class 'numpy.ndarray'>
t_tensor=torch.from_numpy(t_numpy)
print(t_tensor.type())#torch.LongTensor
- list与tensor互相转换
l=[1,2,3]
l_tensor=torch.tensor(l)
print(l_tensor.type())
l_tensor=torch.tensor(np.array(l))#先转成numpy再转成tensor
list转tensor几种方式对比
(1) list->tensor(注:list中的元素不含numpy.ndarrays)
(2) list->tensor(注:list中的元素含numpy.ndarrays)
转换方式为torch.tensor(l)
(3) list->numpy.ndarrays->tensor(注:list中的元素不含numpy.ndarrays)
(4) list->numpy.ndarraays->tensor(注:list中的元素含numpy.ndarrays)
#转换方式为torch.tensor(np.array(l))
但是(1)比(3)快 而(4)比(2)快多了
总结
torch包中定义了10种具有CPU和GPU变体的tensor类型。
torch.Tensor或torch.tensor是一种包含单一数据类型元素的多维矩阵。torch.Tensor或torch.tensor注意事项:
(1). torch.Tensor是默认tensor类型torch.FloatTensor的别名。
(2). torch.tensor总是拷贝数据。
(3).每一个tensor都有一个关联的torch.Storage,它保存着它的数据。
(4).改变tensor的方法是使用下划线后缀标记,如torch.FloatTensor.abs_()就地(in-place)计算绝对值并返回修改后的tensor,而torch.FloatTensor.abs()在新tensor中计算结果。
(5).有几百种tensor相关的运算操作,包括各种数学运算、线性代数、随机采样等。
创建tensor的四种主要方法:
(1).要使用预先存在的数据创建tensor,使用torch.tensor()。
(2).要创建具有特定大小的tensor,使用torch.*,如torch.rand()。
(3).要创建与另一个tensor具有相同大小(和相似类型)的tensor,使用torch.*_like,如torch.rand_like()。
(4).要创建与另一个tensor类型相似但大小不同的tensor,使用tensor.new_*,如tensor.new_ones()。
版权声明:本文为qq_42193790原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。