PyTorch 入门与音乐生成实验笔记
实验目标
本实验旨在通过 PyTorch 框架,学习深度学习的基本概念,包括张量操作、神经网络定义、自动微分以及简单的优化过程。实验分为多个部分,逐步深入 PyTorch 的核心功能。
实验环境
- PyTorch:一个流行的深度学习库,以其灵活性和易用性而闻名。
- 其他依赖:
torch.nn、numpy、matplotlib等。
实验内容
1. PyTorch 基础:张量操作
张量是 PyTorch 中的基本数据结构,可以看作是多维数组。张量的形状(shape)定义了其维度和每个维度的大小。
创建张量
-
标量:
1
2integer = torch.tensor(1234)
decimal = torch.tensor(3.14159265359)输出:
1
2`integer` is a 0-d Tensor: 1234
`decimal` is a 0-d Tensor: 3.1415927410125732 -
向量:
1
2fibonacci = torch.tensor([1, 1, 2, 3, 5, 8])
count_to_100 = torch.tensor(range(100))输出:
1
2`fibonacci` is a 1-d Tensor with shape: torch.Size([6])
`count_to_100` is a 1-d Tensor with shape: torch.Size([100]) -
矩阵和高阶张量:
1
2matrix = torch.tensor([[1, 2], [2, 3]])
images = torch.zeros(10, 3, 256, 256) # 10 张 256x256 的 RGB 图像输出:
1
images is a 4-d Tensor with shape: torch.Size([10, 3, 256, 256])
张量切片
通过切片操作可以访问高阶张量的子张量:
1 | row_vector = matrix[1] # 第二行 |
输出:
1 | `row_vector`: tensor([2, 3]) |
2. 张量计算
在 PyTorch 中,计算可以通过操作张量来实现。这些操作可以被看作是计算图的一部分。
简单计算
1 | a = torch.tensor(15) |
输出:
1 | c1: 76 |
复杂计算
定义一个简单的计算函数:
1 | def func(a, b): |
调用函数:
1 | a, b = 1.5, 2.5 |
输出:
1 | e_out: 6.0 |
3. 神经网络定义
PyTorch 使用 torch.nn.Module 作为所有神经网络模块的基类,提供了构建和训练神经网络的框架。
自定义单层网络
定义一个简单的感知机网络:
1 | class OurDenseLayer(torch.nn.Module): |
测试输出:
1 | layer = OurDenseLayer(2, 3) |
输出:
1 | input shape: torch.Size([1, 2]) |
使用 Sequential API
使用 PyTorch 的 nn.Sequential 定义一个简单的神经网络:
1 | model = nn.Sequential( |
测试输出:
1 | x_input = torch.tensor([[1, 2.]]) |
输出:
1 | input shape: torch.Size([1, 2]) |
4. 自动微分
PyTorch 使用 torch.autograd 实现自动微分,这是训练深度学习模型的关键。
计算梯度
1 | x = torch.tensor(3.0, requires_grad=True) |
输出:
1 | dy_dx of y=x^2 at x=3.0 is: tensor(6.) |
使用梯度下降优化
通过梯度下降优化一个简单的损失函数:
1 | x = torch.randn(1) # 初始化随机值 |