目录
前言
从本周开始,我们学习PyTorch相关知识,提高代码编写能力。这周我们先来学习什么是张量,并且是如何运用在实际操作中的。
PyTorch的安装
第一步,Anaconda创建python3.7的环境
第二步,在3.7的环境下安装PyTorch
PyTorch的历史
PyTorch是2017年1月FAIR(Facebook AI Research)发布的一款深度学习框架。从名称可以看出,PyTorch是由Py和Torch构成的。其中,Torch是纽约大学在2012年发布的一款机器学习框架,采用Lua语言为接口,但因Lua语言较为小众,导致Torch知名度不高。PyTorch是在Torch基础上用 python语言进行封装和重构打造而成的。
简单来说,最早的时候没有PyTorch,只有Torch。Torch的核心是C语言,PyTorch使用python包装了Torch。
张量
张量是个多维数组。(矩阵是二维数组)
在PyTorch中,我们使用张量对模型的输入和输出以及模型的参数进行编码。
张量和NumPy的多维数组非常相似,除此之外张量可以在GPU或其他硬件加速器上运行。
事实上,张量和NumPy数组通常可以共享相同的底层内存,从而无需复制数据。
import torch
import numpy as np
怎样在PyTorch中创建张量?
张量可以通过各种方式初始化。请看以下示例:
直接从列表中创建一个张量
data = [[1, 2],[3, 4]]
x_data = torch.tensor(data)
从NumPy数组中创建一个张量
np_array = np.array(data)
x_np = torch.from_numpy(np_array)
从另一个张量中初始化一个新的张量
x_ones = torch.ones_like(x_data)
print(f"Ones Tensor: \n {x_ones} \n")
x_rand = torch.rand_like(x_data, dtype=torch.float)
print(f"Random Tensor: \n {x_rand} \n")z
根据形状形成一个张量
shape = (2,3,)
rand_tensor = torch.rand(shape)
ones_tensor = torch.ones(shape)
zeros_tensor = torch.zeros(shape)
print(f"Random Tensor: \n {rand_tensor} \n")
print(f"Ones Tensor: \n {ones_tensor} \n")
print(f"Zeros Tensor: \n {zeros_tensor}")
张量的属性
tensor = torch.rand(3,4)
数据类型
print(f"Shape of tensor: {tensor.shape}")
数据形状
print(f"Datatype of tensor: {tensor.dtype}")
张量是在哪个设备上创建的
print(f"Device tensor is stored on: {tensor.device}")
张量的一系列操作
张量运算,包括算术,线性代数,矩阵操作(转置,索引,切片),采样等。
这些操作中的每一个都可以在GPU上运行(通常比CPU上运行速度更快)。
默认情况下,张量是在 CPU 上创建的。我们需要使用方法将张量显式移动到GPU(在检查GPU可用性之后)。
# We move our tensor to the GPU if available
if torch.cuda.is_available():
tensor = tensor.to("cuda")
总结
本周我们学习了张量的基本概念和基本操作,通过这些内容我们初步入手了PyTorch的使用。下次的学习中,我们将了解数据集和数据加载器的有关知识。