pytorch简介

下面是关于“PyTorch简介”的完整攻略。

PyTorch简介

PyTorch是一个基于Python的科学计算库,它是一个用于构建深度学习模型的开源机器学习框架。PyTorch提供了一组用于构建、训练和部署深度学习模型的工具和接口。PyTorch的核心是张量(Tensor),它是一种多维数组,可以用于表示向量、矩阵、图像、视频等数据。PyTorch还提供了自动微分(Autograd)功能,可以自动计算张量的梯度,从而简化了模型的训练过程。

PyTorch示例

示例1:使用PyTorch实现线性回归模型

我们将使用PyTorch实现一个简单的线性回归模型。线性回归是一种用于预测连续值的机器学习模型,它假设目标变量与自变量之间存在线性关系。下面是一个示例:

import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt

# 生成数据
np.random.seed(0)
x = np.random.rand(100, 1)
y = 2 * x + 1 + 0.1 * np.random.randn(100, 1)

# 转换为张量
x = torch.from_numpy(x).float()
y = torch.from_numpy(y).float()

# 定义模型
class LinearRegression(nn.Module):
    def __init__(self):
        super(LinearRegression, self).__init__()
        self.linear = nn.Linear(1, 1)

    def forward(self, x):
        out = self.linear(x)
        return out

model = LinearRegression()

# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

# 训练模型
num_epochs = 1000
for epoch in range(num_epochs):
    inputs = x
    targets = y

    # 前向传播
    outputs = model(inputs)
    loss = criterion(outputs, targets)

    # 反向传播和优化
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

    if (epoch+1) % 100 == 0:
        print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))

# 可视化结果
predicted = model(x).detach().numpy()
plt.plot(x.numpy(), y.numpy(), 'ro', label='Original data')
plt.plot(x.numpy(), predicted, label='Fitted line')
plt.legend()
plt.show()

在这个示例中,我们首先生成了一组随机数据,其中自变量x和目标变量y之间存在线性关系。然后,我们将数据转换为PyTorch张量,并定义了一个名为LinearRegression的线性回归模型。该模型包含一个线性层,用于将输入特征映射到输出特征。在forward方法中,我们首先将输入特征传递给线性层,然后返回输出特征。

接下来,我们定义了一个均方误差(MSE)损失函数和一个随机梯度下降(SGD)优化器。在训练过程中,我们首先将输入特征传递给模型,然后使用损失函数计算损失。接下来,我们使用优化器对模型参数进行更新,以最小化损失。在每个时期结束时,我们打印出当前损失。

在训练结束后,我们使用模型对输入特征进行预测,并将结果可视化。我们可以看到,模型的预测结果与原始数据之间存在很好的线性关系。

示例2:使用PyTorch实现卷积神经网络模型

我们将使用PyTorch实现一个简单的卷积神经网络模型。卷积神经网络是一种用于图像分类、目标检测等计算机视觉任务的深度学习模型,它可以自动学习图像中的特征,并将其用于分类或检测。下面是一个示例:

import torch
import torch.nn as nn
import torchvision
import torchvision.transforms as transforms

# 定义超参数
num_epochs = 5
num_classes = 10
batch_size = 100
learning_rate = 0.001

# 加载数据集
train_dataset = torchvision.datasets.MNIST(root='./data', train=True, transform=transforms.ToTensor(), download=True)
test_dataset = torchvision.datasets.MNIST(root='./data', train=False, transform=transforms.ToTensor())

train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True)
test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False)

# 定义模型
class ConvNet(nn.Module):
    def __init__(self):
        super(ConvNet, self).__init__()
        self.layer1 = nn.Sequential(
            nn.Conv2d(1, 16, kernel_size=5, stride=1, padding=2),
            nn.BatchNorm2d(16),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2, stride=2))
        self.layer2 = nn.Sequential(
            nn.Conv2d(16, 32, kernel_size=5, stride=1, padding=2),
            nn.BatchNorm2d(32),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2, stride=2))
        self.fc = nn.Linear(7*7*32, num_classes)

    def forward(self, x):
        out = self.layer1(x)
        out = self.layer2(out)
        out = out.reshape(out.size(0), -1)
        out = self.fc(out)
        return out

model = ConvNet()

# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)

# 训练模型
total_step = len(train_loader)
for epoch in range(num_epochs):
    for i, (images, labels) in enumerate(train_loader):
        # 前向传播
        outputs = model(images)
        loss = criterion(outputs, labels)

        # 反向传播和优化
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        if (i+1) % 100 == 0:
            print('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, i+1, total_step, loss.item()))

# 在测试集上评估模型
model.eval()
with torch.no_grad():
    correct = 0
    total = 0
    for images, labels in test_loader:
        outputs = model(images)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

    print('Test Accuracy of the model on the 10000 test images: {} %'.format(100 * correct / total))

在这个示例中,我们首先加载了MNIST数据集,并将其转换为PyTorch张量。然后,我们定义了一个名为ConvNet的卷积神经网络模型。该模型包含两个卷积层和一个全连接层。在forward方法中,我们首先将输入图像传递给第一个卷积层,然后使用ReLU函数进行非线性变换,并使用最大池化层进行下采样。接下来,我们将输出传递给第二个卷积层,并再次使用ReLU函数进行非线性变换,并使用最大池化层进行下采样。最后,我们将输出展平,并使用全连接层将其映射到类别概率。

接下来,我们定义了一个交叉熵损失函数和一个Adam优化器。在训练过程中,我们首先将输入图像传递给模型,然后使用损失函数计算损失。接下来,我们使用优化器对模型参数进行更新,以最小化损失。在每个时期结束时,我们打印出当前损失。

在训练结束后,我们使用模型对测试数据进行预测,并计算测试准确率。最后,我们打印出测试准确率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pytorch简介 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • pytorch 移动端部署之helloworld的使用

    PyTorch移动端部署之HelloWorld的使用 PyTorch是一种非常流行的深度学习框架,可以在移动设备上进行部署。本文将介绍如何使用PyTorch在移动设备上部署HelloWorld,并提供两个示例说明。 安装PyTorch 在移动设备上部署PyTorch之前,我们需要先安装PyTorch。PyTorch支持多种移动设备,包括Android和iOS…

    PyTorch 2023年5月16日
    00
  • PyTorch grad_fn的作用以及RepeatBackward, SliceBackward示例

    变量.grad_fn表明该变量是怎么来的,用于指导反向传播。例如loss = a+b,则loss.gard_fn为<AddBackward0 at 0x7f2c90393748>,表明loss是由相加得来的,这个grad_fn可指导怎么求a和b的导数。 程序示例: import torch w1 = torch.tensor(2.0, requi…

    2023年4月7日
    00
  • win10使用清华源快速安装pytorch-GPU版(推荐)

    Win10使用清华源快速安装PyTorch-GPU版(推荐) 在Win10上安装PyTorch-GPU版可以加速深度学习模型的训练。本文将介绍如何使用清华源快速安装PyTorch-GPU版,并提供两个示例。 安装Anaconda 首先,我们需要安装Anaconda,它是一个流行的Python发行版,包含了许多常用的Python库和工具。您可以从官方网站下载适…

    PyTorch 2023年5月16日
    00
  • Pytorch 资料汇总(持续更新)

    1. Pytorch 论坛/网站 PyTorch 中文网 python优先的深度学习框架 Pytorch中文文档 Pythrch-CN文档地址  PyTorch 基礎篇   2. Pytorch 书籍 深度学习入门之PyTorch 深度学习框架PyTorch:入门与实践   3. Pytorch项目实现 the-incredible-pytorch  Pyt…

    PyTorch 2023年4月8日
    00
  • Pytorch之Tensor和Numpy之间的转换的实现方法

    PyTorch和NumPy都是常用的科学计算库,它们都提供了多维数组的支持。在实际应用中,我们可能需要将PyTorch的Tensor对象转换为NumPy的ndarray对象,或者将NumPy的ndarray对象转换为PyTorch的Tensor对象。下面是PyTorch之Tensor和NumPy之间的转换的实现方法的完整攻略。 将PyTorch的Tensor…

    PyTorch 2023年5月15日
    00
  • Pytorch实现LeNet

     实现代码如下: import torch.functional as F class LeNet(torch.nn.Module): def __init__(self): super(LeNet, self).__init__() # 1 input image channel (black & white), 6 output channels…

    PyTorch 2023年4月8日
    00
  • PyTorch环境安装的图文教程

    PyTorch环境安装的图文教程 PyTorch是一个基于Python的科学计算库,它支持GPU加速的张量计算,提供了丰富的神经网络模块,可以帮助我们快速构建和训练深度学习模型。本文将详细讲解PyTorch环境安装的图文教程,包括安装Anaconda、创建虚拟环境、安装PyTorch和测试PyTorch等内容,并提供两个示例说明。 1. 安装Anaconda…

    PyTorch 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部