Tensor
is the basic data structure in PyTorch
which is not only support the List
of Python, but also compatible with NumPy
. Additionally, it is also good at parallel computing and can work with GPUs which boosts the calculation of matrix. In this post, I’ll introduce some basic usage of Tensor with PyTorch.
List vs Tensor
List to Tensor:
1 | l1 = [1,2,3] |
Tensor to List, we can use tolist()
function with a tensor instance:
1 | t1.tolist() |
NumPy vs Tensor
Two ways can be used to construct tensor instance, one is torch.Tensor(data)
, another one is torch.from_numpy(data)
,
1 | import torch |
Even though both the two approaches can create tensor instance, there exists a difference in their results which return a different data type in each method. The first method returns the data as a float32
value, while the other one returns a int64
type which is the same as the input data.
To figure it out, storage()
is used to check the data type of the results:
1 | print(t1.storage()) |
From the output, the first method returns the data as a float32
value, while the other one returns a int64
type which is the same as the input data. So we can find that in ``tensor.Torch(), the data will be converted to
float32,
from_numpy()` just copies the value from the numpy.
Tensor to NumPy:
1 | print(t2.numpy()) |
Data type in PyTorch
First, let’s see the data type of a number in python:
1 | a = 1 |
In Python, numbers are represented as an object. In the above code, a
is an instance of int
class. The object can be allocated from the memory without continuous storage. This object usually needs more storage and is not efficient when dealling with huge data. Much more time is used to allocate and assign new object.
Overall, Python list is certainly not suitable for efficient numerical calculation, while the third libraries such as NumPy or PyTorch are good replacement. The Tensor in PyTorch supports the common data types and we can specify the type by dtype
, here are the common data types of the dtype
:
- torch.float16 or torch.half
- torch.float32 or torch.float (default)
- torch.float64 or torch.double
- torch.int8
- torch.uint8
- torch.int16 or torch.short
- torch.int32 or torch.int
- torch.int64 or torch.long
The higher accuracy of the data, the much more storage and time will be consumed. More over, the half float is only suitable for GPUs which can gain similar results with less time and storage.
- Book: Deep Learning with PyTorch
- https://mp.weixin.qq.com/s/sQEM2Scpn7mannDDAHq2Dw