Pytorch 搭建分类回归神经网络并用GPU进行加速的例子

yizhihongxing

PyTorch搭建分类回归神经网络并用GPU进行加速的例子

在本文中,我们将介绍如何使用PyTorch搭建分类回归神经网络,并使用GPU进行加速。本文将包含两个示例说明。

示例一:使用PyTorch搭建分类神经网络

我们可以使用PyTorch搭建分类神经网络。示例代码如下:

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

# 定义超参数
num_epochs = 5
batch_size = 4
learning_rate = 0.001

# 加载数据集
transform = transforms.Compose(
    [transforms.ToTensor(),
     transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])

trainset = torchvision.datasets.CIFAR10(root='./data', train=True,
                                        download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=batch_size,
                                          shuffle=True, num_workers=2)

testset = torchvision.datasets.CIFAR10(root='./data', train=False,
                                       download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=batch_size,
                                         shuffle=False, num_workers=2)

classes = ('plane', 'car', 'bird', 'cat',
           'deer', 'dog', 'frog', 'horse', 'ship', 'truck')

# 定义模型
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 5)
        self.pool = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = x.view(-1, 16 * 5 * 5)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

net = Net()

# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=learning_rate, momentum=0.9)

# 训练模型
for epoch in range(num_epochs):
    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):
        inputs, labels = data
        optimizer.zero_grad()
        outputs = net(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        running_loss += loss.item()
        if i % 2000 == 1999:
            print('[%d, %5d] loss: %.3f' %
                  (epoch + 1, i + 1, running_loss / 2000))
            running_loss = 0.0

print('Finished Training')

# 测试模型
correct = 0
total = 0
with torch.no_grad():
    for data in testloader:
        images, labels = data
        outputs = net(images)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

print('Accuracy of the network on the 10000 test images: %d %%' % (
    100 * correct / total))

在上述代码中,我们首先加载了CIFAR10数据集,并定义了一个分类神经网络Net。然后,我们定义了损失函数和优化器,并使用训练集训练模型。最后,我们使用测试集测试模型的准确率。

示例二:使用PyTorch搭建回归神经网络

除了分类神经网络,我们还可以使用PyTorch搭建回归神经网络。示例代码如下:

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

# 创建数据集
x_train = np.array([[3.3], [4.4], [5.5], [6.71], [6.93], [4.168], [9.779], [6.182], [7.59], [2.167], [7.042], [10.791], [5.313], [7.997], [3.1]], dtype=np.float32)
y_train = np.array([[1.7], [2.76], [2.09], [3.19], [1.694], [1.573], [3.366], [2.596], [2.53], [1.221], [2.827], [3.465], [1.65], [2.904], [1.3]], dtype=np.float32)

# 转换为张量
x_train = torch.from_numpy(x_train)
y_train = torch.from_numpy(y_train)

# 定义模型
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(1, 10)
        self.fc2 = nn.Linear(10, 1)

    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return x

net = Net()

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

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

    # 前向传播
    outputs = net(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 = net(x_train).detach().numpy()
plt.plot(x_train.numpy(), y_train.numpy(), 'ro', label='Original data')
plt.plot(x_train.numpy(), predicted, label='Fitted line')
plt.legend()
plt.show()

在上述代码中,我们首先创建了一个一维数据集x_trainy_train。然后,我们将数据集转换为张量,并定义了一个回归神经网络Net。接着,我们定义了损失函数和优化器,并使用训练集训练模型。最后,我们使用Matplotlib可视化了结果。

使用GPU进行加速

如果你的计算机支持GPU,你可以使用GPU进行加速。示例代码如下:

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
print(device)

net.to(device)

inputs, labels = inputs.to(device), labels.to(device)

在上述代码中,我们首先判断计算机是否支持GPU。然后,我们将模型和数据移动到GPU上。这样,我们就可以使用GPU进行加速。

总结

本文介绍了如何使用PyTorch搭建分类回归神经网络,并使用GPU进行加速。我们可以使用PyTorch的nn.Module类定义模型,使用nn.CrossEntropyLoss()函数定义损失函数,使用optim.SGD()函数定义优化器,使用backward()函数进行反向传播,使用step()函数更新参数。如果你的计算机支持GPU,你可以使用GPU进行加速。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Pytorch 搭建分类回归神经网络并用GPU进行加速的例子 - Python技术站

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

相关文章

  • pytorch搭建网络模型的4种方法

    import torch import torch.nn.functional as F from collections import OrderedDict   # Method 1 —————————————–   class Net1(torch.nn.Module):   def __init_…

    PyTorch 2023年4月7日
    00
  • pytorch中,嵌入层torch.nn.embedding的计算方式

    1. 离散特征如何预处理之后嵌入 2.使用pytorch怎么使用nn.embedding  以推荐系统中:考虑输入样本只有两个特征,用逻辑回归来预测点击率ctr 看图混个眼熟,后面再说明: 一、离散数据预处理 假设一个样本有两个离散特征【职业,省份】,第一个特征种类有10种,第二个特征种类有20种。于是field_dims=[10, 20] “职业”的取值为…

    2023年4月7日
    00
  • pytorch三层全连接层实现手写字母识别方式

    下面是使用PyTorch实现手写字母识别的完整攻略,包含两个示例说明。 1. 加载数据集 首先,我们需要加载手写字母数据集。这里我们使用MNIST数据集,它包含了60000张28×28的手写数字图片和10000张测试图片。我们可以使用torchvision.datasets模块中的MNIST类来加载数据集。以下是示例代码: import torch impo…

    PyTorch 2023年5月15日
    00
  • 详解Pytorch如何利用yaml定义卷积网络

    在PyTorch中,我们可以使用YAML文件来定义卷积神经网络。YAML是一种轻量级的数据序列化格式,它可以方便地定义复杂的数据结构。本文将介绍如何使用YAML文件来定义卷积神经网络,并提供两个示例。 安装PyYAML 在使用YAML文件定义卷积神经网络之前,我们需要安装PyYAML库。可以使用以下命令来安装PyYAML: pip install pyyam…

    PyTorch 2023年5月15日
    00
  • pytorch tensorboard可视化的使用详解

    PyTorch TensorBoard是一个可视化工具,可以帮助开发者更好地理解和调试深度学习模型。本文将介绍如何使用PyTorch TensorBoard进行可视化,并演示两个示例。 安装TensorBoard 在使用PyTorch TensorBoard之前,需要先安装TensorBoard。可以使用以下命令在终端中安装TensorBoard: pip …

    PyTorch 2023年5月15日
    00
  • 问题解决:RuntimeError: CUDA out of memory.(….; 5.83 GiB reserved in total by PyTorch)

    https://blog.csdn.net/weixin_41587491/article/details/105488239可以改batch_size 通常有64、32啥的

    PyTorch 2023年4月7日
    00
  • pytorch框架的详细介绍与应用详解

    下面是关于“PyTorch框架的详细介绍与应用详解”的完整攻略。 PyTorch简介 PyTorch是一个基于Python的科学计算库,它提供了两个高级功能:张量计算和深度学习。PyTorch的张量计算功能类似于NumPy,但可以在GPU上运行,这使得它非常适合于深度学习。PyTorch的深度学习功能包括自动求导、动态计算图和模型部署等功能。PyTorch的…

    PyTorch 2023年5月15日
    00
  • Pytorch实现交叉熵的过程

    在pytorch当中,有两种方式可以实现交叉熵,而我们把softmax概率传入传入对数似然损失得到的损失函数叫做“交叉熵损失” 在pytorch当中有两种方法实现交叉熵损失: 实现方式1: criterion=nn.CrossEntropyLoss() loss=criterion(input,target) 实现方式2: #对输出值进行计算softmax,…

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