入门1,Pytorch深度学习---张量学习

声明了一个未初始化的矩阵,但在使用前不包含确定的已知值。创建未初始化的矩阵时,当时分配的内存中的任何值都将显示为初始值。

关键词 ===== 程序意思

构造一个未初始化的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上运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值