01 torch基础
预备知识
- GPU是实现并行计算的硬件,CUDA是一个为开发人员提供api的软件层。
- PyTorch里面内置CUDA,无需额外下载,所需要的是GPU
- 处理简单任务用CPU更合适,因为移入GPU成本很高
CUDA与PyTorch的结合使用
- PyTorch利用CUDA,即在GPU上执行计算,只需要将张量对象调用CUDA来指示PyTorch完成
import torch t = torch.tensor([1, 2, 3]) print(t.device) # 输出:cpu
默认情况下,以这种方式创建的tensor对象执行任何操作都在CPU上执行
- 张量移动到GPU上
> t = t.cuda() > t tensor([1, 2, 3], device='cuda:0')
- 在CPU和GPU上都可以运行,动态检测有无GPU
import torch # 检查 CUDA 是否可用,如果可用就使用 GPU,否则使用 CPU device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # 将张量放在合适的设备上 t = torch.tensor([1, 2, 3], device=device) print(t) print(f"Tensor is on: {t.device}")
这段代码"cuda" if torch.cuda.is_available() else "cpu"是py中三元组,等同于
# 检查 CUDA 是否可用 if torch.cuda.is_available(): device_type = "cuda" # 如果有 CUDA 可用,使用 GPU else: device_type = "cpu" # 否则,使用 CPU # 根据 device_type 创建设备对象 device = torch.device(device_type) # 打印设备类型 print(f"Using device: {device}")
张量(tensor)——深度学习的数据结构
什么是张量?
神经网络的输入、输出和转换都是用张量来表示。张量是深度学习的主要数据结构。
张量和n维数组是一个概念。
张量的属性
Rank,Axes,Shape-秩,轴和形状
张量的秩---张量中存在的维数。
秩和索引---张量的秩是几,则需要几个索引才能访问张量中的特定元素。
张量的轴---张量的特定维度,Axis。每个轴的长度告诉我们每个轴上有多少个索引可用。
pytorch中,张量大小和张量形状是一个概念
张量的形状,张量的重塑(reshape)。
例,确定张量t的形状?
t = torch.tensor([ [ [2,3,4,4] ,[2,3,4,5] ] ])
output:torch.Size([1,2,4])
⚠️⚠️:关于维度的理解:关于第一维,看第一个中括号包含几个元素(元素以逗号分隔),第n维,就看第n个中括号里包含几个元素。
换个角度理解,【张量中有几个连续的中括号就有几个维度】,上述张量中有3个连续的中括号,即是三维张量。【将torch.Size(1,2,4)中的数从右向左看】,最内层中扩号有4个元素,对应torch.Size中的4; 依次类推,第二层括号里有[2,3,4,4]和[2,3,4,5],是2个元素,对应torch.Size中的2 ;第三层括号里有一个“[[”元素,所以为1。