%matplotlib inline
It’s a Python-based scientific computing package targeted at two sets of audiences:
Tensors Tensors are similar to Numpy's ndarrays, with the addtion being that Tensors can also be used on GPU to accelerate computing.
Pytorch is a Python-based product developed for users with the following objectives: It is a scientific calculation package.
--An alternative to Numpy that can use GPU --Deep learning platform that combines speed and flexibility
Tensors
Tensors are similar to Numpy's ndarrays, except that they can be calculated on the GPU.
from __future__ import print_function
import torch
An uninitialized matrix is declared, but does not contain definite known values before it is used. When an uninitialized matrix is created, whatever values were in the allocated memory at the time will appear as the initial values.
Construct a 5x3 matrix, uninitialized: Generate an uninitialized 5x3 matrix
x = torch.empty(5, 3)
print(x)
Construct a randomly initialized matrix:
Generate a randomly initialized matrix
x = torch.rand(5, 3)
print(x)
Construct a matrix filled zeros and of dtype long:
Generate a zero-initialized long matrix
x = torch.zeros(5, 3, dtype=torch.long)
print(x)
Construct a tensor directly from data:
Generate a matrix from the data
x = torch.tensor([5.5, 3])
print(x)
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
Alternatively, generate a tensor from an existing tensor. These methods reuse the entered tensor properties unless specified by the user. Example: type
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
Get its size:
Get the size of the tensor
print(x.size())
``torch.Size`` is in fact a tuple, so it supports all tuple operations.
There are multiple syntaxes for operations. In the following example, we will take a look at the addition operation.
Addition: syntax 1
There are various distributions in the operation. The grammar of addition is shown below.
Addition 1
y = torch.rand(5, 3)
print(x + y)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-1-3846198563ac> in <module>
----> 1 y = torch.rand(5, 3)
2 print(x + y)
NameError: name 'torch' is not defined
Addition: syntax 2
Addition 2
print(torch.add(x, y))
Addition: providing an output tensor as argument
Addition: Pass the output tensor as an argument
result = torch.empty(5, 3)
torch.add(x, y, out=result)
print(result)
Addition: in-place
Addition: On the spot
# adds x to y
y.add_(x)
print(y)
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!
You can use almost any Numpy indexing! !!
print(x[:, 1])
Resizing: If you want to resize/reshape tensor, you can use torch.view
:
Resize: If you want to change the shape of the 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())
If you have a one element tensor, use .item()
to get the value as a
Python number
Use .item ()
to retrieve Python numbers from a tensor with one element
x = torch.randn(1)
print(x)
print(x.item())
Read later:
100+ Tensor operations, including transposing, indexing, slicing,
mathematical operations, linear algebra, random numbers, etc.,
are described
here <https://pytorch.org/docs/torch>
_.
** Read later **
For more information
https://pytorch.org/docs/torch
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 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Easy to convert torch tensor to Numpy array
Torch tensor and Numpy array share memory (pointer-like) If you change the tensor, so does the Numpy array. And vice versa
a = torch.ones(5)
print(a)
b = a.numpy()
print(b)
See how the numpy array changed in value.
Let's see how the torch tensor changes.
a.add_(1)
print(a)
print(b)
Converting NumPy Array to Torch Tensor ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ See how changing the np array changed the Torch Tensor automatically
Convert Numpy array to 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)
All the Tensors on the CPU except a CharTensor support converting to NumPy and back.
Tensors can be moved onto any device using the .to
method.
All tensors except CharTensor support conversion to Numpy array.
You can move the tensor to your favorite device using .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") # 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!
Recommended Posts