【pytorch】官网60分钟入门WHAT IS PYTORCH?

WHAT IS PYTORCH?

It’s a Python-based scientific computing package targeted at two sets of audiences:

  • A replacement for NumPy to use the power of GPUs
  • a deep learning research platform that provides maximum flexibility and speed

Getting Started

Tensors

Tensors are similar to NumPy’s ndarrays, with the addition being that Tensors can also be used on a GPU to accelerate computing.

from future import print_function
import torch
Construct a 5x3 matrix, uninitialized:

x = torch.empty(5, 3)
print(x)
Out:

tensor([[9.7056e+24, 1.6283e+32, 3.7913e+22],
[3.9653e+28, 1.0876e-19, 6.2027e+26],
[2.3685e+21, 2.5443e+30, 2.3687e+21],
[6.2080e+26, 1.4772e+20, 9.4764e+21],
[2.0500e+03, 3.7903e+22, 4.0687e+31]])
Construct a randomly initialized matrix:

x = torch.rand(5, 3)
print(x)
Out:

tensor([[0.3624, 0.6796, 0.5501],
[0.5425, 0.7624, 0.9415],
[0.4596, 0.7968, 0.9181],
[0.7503, 0.7402, 0.8415],
[0.2853, 0.5888, 0.7155]])
Construct a matrix filled zeros and of dtype long:

x = torch.zeros(5, 3, dtype=torch.long)
print(x)
Out:

tensor([[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
Construct a tensor directly from data:

x = torch.tensor([5.5, 3])
print(x)
Out:

tensor([5.5000, 3.0000])
or create a tensor based on an existing tensor. These methods will reuse properties of the input tensor, e.g. dtype, unless new values are provided by user

x = x.new_ones(5, 3, dtype=torch.double) # new_* methods take in sizes
print(x)

x = torch.randn_like(x, dtype=torch.float) # override dtype!
print(x) # result has the same size
Out:

tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]], dtype=torch.float64)
tensor([[ 1.1582, 0.4209, 0.6171],
[ 0.3534, 0.6799, -0.8579],
[-0.3979, -0.3585, 0.2288],
[ 0.4490, -1.7070, -0.5298],
[-1.3862, -1.0257, 1.2576]])
Get its size:

print(x.size())
Out:

torch.Size([5, 3])
NOTE

torch.Size is in fact a tuple, so it supports all tuple operations.

Operations
There are multiple syntaxes for operations. In the following example, we will take a look at the addition operation.

Addition: syntax 1

y = torch.rand(5, 3)
print(x + y)
Out:

tensor([[ 2.0850, 0.5744, 1.5941],
[ 0.8592, 1.4459, -0.8483],
[ 0.3223, -0.0411, 0.4082],
[ 1.1741, -1.5871, 0.3750],
[-1.2946, -0.7044, 1.5054]])
Addition: syntax 2

print(torch.add(x, y))
Out:

tensor([[ 2.0850, 0.5744, 1.5941],
[ 0.8592, 1.4459, -0.8483],
[ 0.3223, -0.0411, 0.4082],
[ 1.1741, -1.5871, 0.3750],
[-1.2946, -0.7044, 1.5054]])
Addition: providing an output tensor as argument

result = torch.empty(5, 3)
torch.add(x, y, out=result)
print(result)
Out:

tensor([[ 2.0850, 0.5744, 1.5941],
[ 0.8592, 1.4459, -0.8483],
[ 0.3223, -0.0411, 0.4082],
[ 1.1741, -1.5871, 0.3750],
[-1.2946, -0.7044, 1.5054]])
Addition: in-place

adds x to y

y.add_(x)
print(y)
Out:

tensor([[ 2.0850, 0.5744, 1.5941],
[ 0.8592, 1.4459, -0.8483],
[ 0.3223, -0.0411, 0.4082],
[ 1.1741, -1.5871, 0.3750],
[-1.2946, -0.7044, 1.5054]])
NOTE

Any operation that mutates a tensor in-place is post-fixed with an . For example: x.copy(y), x.t_(), will change x.

You can use standard NumPy-like indexing with all bells and whistles!

print(x[:, 1])
Out:

tensor([ 0.4209, 0.6799, -0.3585, -1.7070, -1.0257])
Resizing: If you want to resize/reshape tensor, you can use 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())
Out:

torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])
If you have a one element tensor, use .item() to get the value as a Python number

x = torch.randn(1)
print(x)
print(x.item())
Out:

tensor([0.5926])
0.5925928950309753
Read later:

100+ Tensor operations, including transposing, indexing, slicing, mathematical operations, linear algebra, random numbers, etc., are described here.
NumPy Bridge
Converting a Torch Tensor to a NumPy array and vice versa is a breeze.

The Torch Tensor and NumPy array will share their underlying memory locations (if the Torch Tensor is on CPU), and changing one will change the other.

Converting a Torch Tensor to a NumPy Array
a = torch.ones(5)
print(a)
Out:

tensor([1., 1., 1., 1., 1.])
b = a.numpy()
print(b)
Out:

[1. 1. 1. 1. 1.]
See how the numpy array changed in value.

a.add_(1)
print(a)
print(b)
Out:

tensor([2., 2., 2., 2., 2.])
[2. 2. 2. 2. 2.]
Converting NumPy Array to Torch Tensor
See how changing the np array changed the Torch Tensor automatically

import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
np.add(a, 1, out=a)
print(a)
print(b)
Out:

[2. 2. 2. 2. 2.]
tensor([2., 2., 2., 2., 2.], dtype=torch.float64)
All the Tensors on the CPU except a CharTensor support converting to NumPy and back.

CUDA Tensors
Tensors can be moved onto any device using the .to method.

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”) # a CUDA device object
y = torch.ones_like(x, device=device) # directly create a tensor on GPU
x = x.to(device) # or just use strings .to("cuda")
z = x + y
print(z)
print(z.to(“cpu”, torch.double)) # .to can also change dtype together!
Out:

tensor([1.5926], device=‘cuda:0’)
tensor([1.5926], dtype=torch.float64)
Total running time of the script: ( 0 minutes 6.714 seconds)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值