Pytorch学习笔记(1)

简介: PyTorch是一个基于Python的开源机器学习库,广泛应用于深度学习和人工智能领域。它提供了丰富的工具和函数,方便我们构建、训练和部署神经网络模型。本文将围绕以下几个关键主题展开:张量(Tensors):PyTorch中的数据基本单位。自动求导(Automatic Differentiation):PyTorch中的自动求导机制。神经网络的构建和训练:使用PyTorch构建和训练神经网络的基本步骤。

1. 张量(Tensors)


在PyTorch中,张量是一种多维数组的数据结构,类似于NumPy中的数组。张量是PyTorch进行数据处理和计算的基本单位。它可以是标量(0维张量)、向量(1维张量)、矩阵(2维张量)或更高维度的数组。


让我们看一个创建和操作张量的示例:

import torch
# 创建一个2x3的随机张量
x = torch.randn(2, 3)
print(x)
# 张量的形状
print(x.shape)
# 张量的大小(元素个数)
print(x.size())
# 张量的数据类型
print(x.dtype)
输出:
tensor([[ 0.2437, -0.9872,  1.3435],
        [-0.5496,  0.7643, -1.0878]])
torch.Size([2, 3])
torch.Size([2, 3])
torch.float32


在上面的示例中,我们首先使用torch.randn函数创建了一个2x3的随机张量x。我们还展示了如何获取张量的形状、大小和数据类型。


PyTorch提供了丰富的函数和方法来创建和操作张量。您可以使用这些功能来执行各种数学运算、线性代数操作和其他操作。


2. 自动求导(Automatic Differentiation)


自动求导是PyTorch的一个强大功能,它使我们能够自动计算张量的导数。自动求导机制对于训练神经网络模型和优化算法非常重要。


让我们看一个使用自动求导的示例:

import torch
# 创建一个需要求导的张量
x = torch.tensor(3.0, requires_grad=True)
# 定义一个函数 y = x^2
y = x**2
# 计算y相对于x的导数
y.backward()
# 输出导数值
print(x.grad)

输出:

tensor(6.)


在上面的示例中,我们首先创建了一个需要求导的张量x,并将其设置为requires_grad=True以指示我们希望计算它的导数。然后,我们定义了一个函数y = x^2,并使用自动求导机制计算了y相对于x的导数。最后,我们打印了导数值。


使用自动求导,我们可以轻松地计算张量的梯度,无需手动编写导数计算的代码。这对于训练神经网络模型和实现复杂的优化算法非常有用。


3. 神经网络的构建和训练


PyTorch提供了一组强大的工具和函数,用于构建、训练和评估神经网络模型。我们可以使用PyTorch的torch.nn模块来定义神经网络的层和模型结构,使用torch.optim模块来定义优化器和损失函数,以及使用自动求导机制进行模型参数的更新。


让我们看一个使用PyTorch构建和训练简单神经网络的示例:

import torch
import torch.nn as nn
import torch.optim as optim
# 定义一个简单的神经网络模型
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc = nn.Linear(10, 1)
    def forward(self, x):
        x = self.fc(x)
        return x
# 创建模型实例
model = Net()
# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
# 构造输入和目标张量
inputs = torch.randn(16, 10)
targets = torch.randn(16, 1)
# 训练模型
for epoch in range(100):
    optimizer.zero_grad()  # 清除梯度
    outputs = model(inputs)  # 前向传播
    loss = criterion(outputs, targets)  # 计算损失
    loss.backward()  # 反向传播,计算梯度
    optimizer.step()  # 更新模型参数
# 使用训练好的模型进行预测
new_inputs = torch.randn(1, 10)
predicted = model(new_inputs)
print(predicted)


输出:

tensor([[0.1321]], grad_fn=<AddmmBackward>)


在上面的示例中,我们首先定义了一个简单的神经网络模型Net,其中包含一个全连接层。然后,我们创建了模型实例、定义了损失函数(均方误差)和优化器(随机梯度下降),并构造了输入和目标张量。接下来,我们使用循环对模型进行训练,包括前向传播、损失计算、反向传播和参数更新。最后,我们使用训练好的模型进行预测。


通过这个简单的示例,我们展示了如何使用PyTorch构建、训练和使用神经网络模型。

相关文章
|
数据采集 PyTorch 数据处理
Pytorch学习笔记(3):图像的预处理(transforms)
Pytorch学习笔记(3):图像的预处理(transforms)
1633 1
Pytorch学习笔记(3):图像的预处理(transforms)
|
机器学习/深度学习 PyTorch 算法框架/工具
Pytorch学习笔记(1):基本概念、安装、张量操作、逻辑回归
Pytorch学习笔记(1):基本概念、安装、张量操作、逻辑回归
473 0
Pytorch学习笔记(1):基本概念、安装、张量操作、逻辑回归
|
PyTorch 算法框架/工具 索引
Pytorch学习笔记(2):数据读取机制(DataLoader与Dataset)
Pytorch学习笔记(2):数据读取机制(DataLoader与Dataset)
779 0
Pytorch学习笔记(2):数据读取机制(DataLoader与Dataset)
|
机器学习/深度学习 缓存 监控
Pytorch学习笔记(7):优化器、学习率及调整策略、动量
Pytorch学习笔记(7):优化器、学习率及调整策略、动量
1225 0
Pytorch学习笔记(7):优化器、学习率及调整策略、动量
|
5月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(五):nn.AdaptiveAvgPool2d()函数详解
PyTorch中的`nn.AdaptiveAvgPool2d()`函数用于实现自适应平均池化,能够将输入特征图调整到指定的输出尺寸,而不需要手动计算池化核大小和步长。
447 1
Pytorch学习笔记(五):nn.AdaptiveAvgPool2d()函数详解
|
5月前
|
算法 PyTorch 算法框架/工具
Pytorch学习笔记(九):Pytorch模型的FLOPs、模型参数量等信息输出(torchstat、thop、ptflops、torchsummary)
本文介绍了如何使用torchstat、thop、ptflops和torchsummary等工具来计算Pytorch模型的FLOPs、模型参数量等信息。
707 2
|
5月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(六):view()和nn.Linear()函数详解
这篇博客文章详细介绍了PyTorch中的`view()`和`nn.Linear()`函数,包括它们的语法格式、参数解释和具体代码示例。`view()`函数用于调整张量的形状,而`nn.Linear()`则作为全连接层,用于固定输出通道数。
235 0
Pytorch学习笔记(六):view()和nn.Linear()函数详解
|
5月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(四):nn.MaxPool2d()函数详解
这篇博客文章详细介绍了PyTorch中的nn.MaxPool2d()函数,包括其语法格式、参数解释和具体代码示例,旨在指导读者理解和使用这个二维最大池化函数。
304 0
Pytorch学习笔记(四):nn.MaxPool2d()函数详解
|
5月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(三):nn.BatchNorm2d()函数详解
本文介绍了PyTorch中的BatchNorm2d模块,它用于卷积层后的数据归一化处理,以稳定网络性能,并讨论了其参数如num_features、eps和momentum,以及affine参数对权重和偏置的影响。
495 0
Pytorch学习笔记(三):nn.BatchNorm2d()函数详解
|
5月前
|
机器学习/深度学习 PyTorch TensorFlow
Pytorch学习笔记(二):nn.Conv2d()函数详解
这篇文章是关于PyTorch中nn.Conv2d函数的详解,包括其函数语法、参数解释、具体代码示例以及与其他维度卷积函数的区别。
630 0
Pytorch学习笔记(二):nn.Conv2d()函数详解