目录
一、前言
二、实验环境
三、PyTorch数据结构
0、分类
1、张量(Tensor)
2、张量操作(Tensor Operations)
1. 数学运算
2. 统计计算
3. 张量变形
4. 索引和切片
使用索引访问单个元素
使用切片访问子集
使用索引和切片进行修改
布尔索引(Boolean indexing)
高级切片(Advanced slicing)
ChatGPT:
PyTorch是一个开源的机器学习框架,广泛应用于深度学习领域。它提供了丰富的工具和库,用于构建和训练各种类型的神经网络模型。下面是PyTorch的一些详细介绍:
动态计算图:PyTorch使用动态计算图的方式进行计算,这意味着在运行时可以动态地定义、修改和调整计算图,使得模型的构建和调试更加灵活和直观。
强大的GPU加速支持:PyTorch充分利用GPU进行计算,可以大幅提升训练和推理的速度。它提供了针对GPU的优化操作和内存管理,使得在GPU上运行模型更加高效。
自动求导:PyTorch内置了自动求导的功能,可以根据定义的计算图自动计算梯度。这简化了反向传播算法的实现,使得训练神经网络模型更加便捷。
大量的预训练模型和模型库:PyTorch生态系统中有许多预训练的模型和模型库可供使用,如TorchVision、TorchText和TorchAudio等,可以方便地加载和使用这些模型,加快模型开发的速度。
高级抽象接口:PyTorch提供了高级抽象接口,如
nn.Module
和nn.functional
,用于快速构建神经网络模型。这些接口封装了常用的神经网络层和函数,简化了模型的定义和训练过程。支持分布式训练:PyTorch支持在多个GPU和多台机器上进行分布式训练,可以加速训练过程,处理大规模的数据和模型。
总体而言,PyTorch提供了一个灵活而强大的平台,使得深度学习的研究和开发更加便捷和高效。它的简洁的API和丰富的功能使得用户可以快速实现复杂的神经网络模型,并在各种任务中取得优秀的性能。
本系列实验使用如下环境
conda create -n DL python=3.7
conda activate DL
pip install torch==1.8.1+cu102 torchvision==0.9.1+cu102 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
conda install matplotlib
关于配置环境问题,可参考前文的惨痛经历:
【深度学习】Pytorch 系列教程(一):PyTorch数据结构:1、Tensor(张量):维度(Dimensions)、数据类型(Data Types)_QomolangmaH的博客-CSDN博客https://blog.csdn.net/m0_63834988/article/details/132909219?spm=1001.2014.3001.5501https://blog.csdn.net/m0_63834988/article/details/132909219?spm=1001.2014.3001.5501编辑https://blog.csdn.net/m0_63834988/article/details/132909219?spm=1001.2014.3001.5501编辑https://blog.csdn.net/m0_63834988/article/details/132909219?spm=1001.2014.3001.5501https://blog.csdn.net/m0_63834988/article/details/132909219?spm=1001.2014.3001.5501
PyTorch提供了丰富的操作函数,用于对Tensor进行各种操作,如数学运算、统计计算、张量变形、索引和切片等。这些操作函数能够高效地利用GPU进行并行计算,加速模型训练过程。
在PyTorch中,可以使用索引和切片操作来访问和修改张量的特定元素或子集。
使用方括号和索引值来访问张量中的单个元素。索引值从0开始,并沿着每个维度进行指定。
import torch
x = torch.tensor([[1, 2, 3], [4, 5, 6]])
print(x[0, 1]) # 访问第0行、第1列的元素
输出:
tensor(2)
可以使用冒号(:)进行切片操作,以访问张量的子集。冒号可以用来指定起始索引、结束索引和步长。
import torch
x = torch.tensor([[1, 2, 3], [4, 5, 6]])
print(x[:, 1:]) # 访问所有行的第1列及之后的元素
输出:
tensor([[2, 3],
[5, 6]])
可以使用索引和切片操作来修改张量中的特定元素或子集。
import torch
x = torch.tensor([[1, 2, 3], [4, 5, 6]])
x[0, 1] = 9 # 修改第0行、第1列的元素为9
print(x)
输出:
tensor([[1, 9, 3],
[4, 5, 6]])
使用布尔张量作为索引,可以选择与布尔张量中相应位置为True的元素。布尔张量的形状必须与被索引的张量的形状相匹配。
import torch
tensor = torch.tensor([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 使用布尔索引选择元素
bool_index = tensor[tensor > 5]
print("布尔索引选择的元素:", bool_index)
输出:
tensor([6, 7, 8, 9])
除了基本的切片操作外,还可以使用逗号将多个切片组合在一起,实现对不同维度的切片操作。
import torch
tensor = torch.tensor([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 使用高级切片选择子集
advanced_slice = tensor[1:, ::2]
print("高级切片选择的子集:\n", advanced_slice)
输出:
tensor([[4, 6],
[7, 9]])
使用高级切片选择了张量中从第二行开始到最后一行的子集,并且每隔一列选择一个元素。