声明了一个未初始化的矩阵,但在使用前不包含确定的已知值。创建未初始化的矩阵时,当时分配的内存中的任何值都将显示为初始值。
关键词 ===== 程序意思
构造一个未初始化的5x3矩阵:
x = torch.empty(5,3)
print(x)
出:
tensor([[ 9.2030e+14, 7.3787e-19, 3.1588e-29],
[ 1.6175e-38, 4.5981e+34, nan],
[ 1.0947e-22, 1.6584e-35, 1.1422e-16],
[ 1.1509e-16, -5.8528e-10, 1.0866e-30],
[ nan, 2.5428e-36, -7.8951e-10]])
构造一个随机初始化的矩阵:
x = torch.rand(5,3)
print(x)
出;
tensor([[0.4698, 0.1850, 0.6809],
[0.1960, 0.9451, 0.9377],
[0.6403, 0.7594, 0.9431],
[0.9511, 0.3852, 0.7463],
[0.7927, 0.0973, 0.8575]])
构造一个填充零且dtype long的矩阵:
x = torch.zeros(5,3,dtype=torch.long)
print(x)
出:
tensor([[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
直接从数据构造张量:
x = torch.tensor([5.5,3])
print(x)
出:
tensor([5.5000, 3.0000])
或基于现有张量创建张量。这些方法将重用输入张量的属性,例如dtype,除非用户提供新值
x = x.new_ones(5,3,dtype=torch.double)
print(x)
x = torch.randa_like(x,dtype=torch.float)
print(x)
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]], dtype=torch.float64)
tensor([[ 0.0468, 0.4832, -2.5757],
[ 0.5207, -0.5166, 0.1378],
[-0.2997, 1.7287, 1.3047],
[ 0.2877, 0.5479, -0.9375],
[-2.2175, -0.5508, -0.5823]])
得到它的大小:
print(x.size())
torch.Size([5, 3])
torch.Size实际上是一个元组,因此它支持所有元组操作。
运作方式
操作有多种语法。在下面的示例中,我们将看一下加法运算。
加法:语法1
y = torch.rand(5,3)
print(x + y)
出:
tensor([[ 0.3016, 1.1967, -2.0242],
[ 0.8845, 0.4419, 0.9350],
[ 0.6213, 2.5678, 2.0021],
[ 0.7268, 1.3817, -0.8195],
[-2.0693, 0.0836, -0.1306]])
加法:语法2
print(torch.add(x,y))
出:
tensor([[ 0.3016, 1.1967, -2.0242],
[ 0.8845, 0.4419, 0.9350],
[ 0.6213, 2.5678, 2.0021],
[ 0.7268, 1.3817, -0.8195],
[-2.0693, 0.0836, -0.1306]])
加法:提供输出张量作为参数
result = torch.empty(5,3)
torch.add(x,y,out=result)
print(result)
出:
tensor([[ 0.3016, 1.1967, -2.0242],
[ 0.8845, 0.4419, 0.9350],
[ 0.6213, 2.5678, 2.0021],
[ 0.7268, 1.3817, -0.8195],
[-2.0693, 0.0836, -0.1306]])
加法:就地
adds x to y
y.add_(x)
print(y)
出:
tensor([[ 0.3016, 1.1967, -2.0242],
[ 0.8845, 0.4419, 0.9350],
[ 0.6213, 2.5678, 2.0021],
[ 0.7268, 1.3817, -0.8195],
[-2.0693, 0.0836, -0.1306]])
任何使张量就地变化的操作都用固定_。例如:x.copy_(y),x.t_(),将改变x。
您可以对所有的钟声使用标准的类似于NumPy的索引!
print(x[:,1])
出:
tensor([ 0.4832, -0.5166, 1.7287, 0.5479, -0.5508])
调整大小:如果要调整张量的大小/形状,可以使用torch.view:
x = torch.randn(4, 4)
y = x.view(16)
z = x.view(-1, 8) # the size -1 is inferred from other dimensions
print(x.size(), y.size(), z.size())
出:
torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])
如果您具有一个元素张量,请使用.item()将该值作为Python数字获取
x = torch.randa(1)
print(x)
print(x.item())
出:
tensor([-0.8826])
-0.8826243281364441
Numpy
将Torch张量转换为NumPy数组,反之亦然,这很容易。
Torch Tensor和NumPy数组将共享其基础内存位置(如果Torch Tensor在CPU上),并且更改一个将更改另一个。
将Torch张量转换为NumPy数组
a = torch.ones(5)
print(a)
出:
tensor([1., 1., 1., 1., 1.])
b = a.numpy()
print(b)
出:
[1. 1. 1. 1. 1.]
查看numpy数组的值如何变化。
a.add_(1)
print(a)
print(b)
出:
tensor([2., 2., 2., 2., 2.])
[2. 2. 2. 2. 2.]
将NumPy数组转换为Torch张量
查看更改np数组如何自动更改Torch Tensor
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
np.add(a,1,out=a)
print(a)
print(b)
出:
[2. 2. 2. 2. 2.]
tensor([2., 2., 2., 2., 2.], dtype=torch.float64)
除CharTensor之外,CPU上的所有张量都支持转换为NumPy并返回。
**
CUDA张量
**
使用该.to方法可以将张量移动到任何设备上。
let us run this cell only if CUDA is available
We will use torch.device
objects to move tensors in and out of GPU
if torch.cuda.is_available():
device = torch.device(“cuda”)
y = torch.ones_like(x,device=device)
x= x.to(device)
z=x+y
print(z)
print(z.to(“cpu”,torch.double))
出:
tensor([0.1174], device='cuda:0')
tensor([0.1174], dtype=torch.float64)
总结;
一个z在GPU上运行
另外一个z在CPU上运行