PyTorch一小时掌握之神经网络气温预测篇

PyTorch一小时掌握之神经网络气温预测篇

PyTorch是一种常用的深度学习框架,它提供了丰富的工具和函数,可以帮助我们快速构建和训练深度学习模型。本文将详细讲解如何使用PyTorch构建神经网络模型,并使用该模型进行气温预测。本文将分为以下几个部分:

  1. 数据准备:我们将使用气温数据集来训练和测试神经网络模型。

  2. 模型构建:我们将使用PyTorch构建一个简单的神经网络模型。

  3. 模型训练:我们将使用PyTorch的优化器和损失函数来训练神经网络模型。

  4. 模型测试:我们将使用测试数据集来测试神经网络模型的性能。

  5. 示例说明:我们将提供两个示例说明,分别是使用PyTorch进行气温预测和图像分类。

1. 数据准备

我们将使用气温数据集来训练和测试神经网络模型。该数据集包含了每天的最高气温和最低气温,我们将使用最高气温来预测最低气温。以下是数据集的示例:

# Date,MaxTemp,MinTemp
01/01/2010,32,20
01/02/2010,35,22
01/03/2010,33,21
01/04/2010,30,18
01/05/2010,29,16

我们将使用Pandas库来读取和处理数据集。以下是数据准备的示例代码:

import pandas as pd
import numpy as np

# 读取数据集
data = pd.read_csv('temperature.csv')

# 处理数据集
data['MaxTemp'] = (data['MaxTemp'] - 32) * 5/9
data['MinTemp'] = (data['MinTemp'] - 32) * 5/9
data = data[['MaxTemp', 'MinTemp']]
data = data.to_numpy()

在这个示例中,我们首先使用Pandas库的read_csv函数来读取气温数据集。然后,我们使用numpy库来处理数据集,将最高气温和最低气温转换为摄氏度,并将数据集转换为numpy数组。

2. 模型构建

我们将使用PyTorch构建一个简单的神经网络模型,该模型包含一个输入层、一个隐藏层和一个输出层。以下是模型构建的示例代码:

import torch
import torch.nn as nn

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

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

# 创建神经网络模型
net = Net()

在这个示例中,我们首先定义了一个名为Net的神经网络模型,该模型包含一个输入层、一个隐藏层和一个输出层。我们使用PyTorch的nn.Linear函数来定义线性层,使用nn.ReLU函数来定义激活函数。然后,我们使用PyTorch的nn.Module类来创建神经网络模型。

3. 模型训练

我们将使用PyTorch的优化器和损失函数来训练神经网络模型。以下是模型训练的示例代码:

import torch.optim as optim

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

# 训练神经网络模型
for epoch in range(1000):
    running_loss = 0.0
    for i in range(len(data)):
        # 获取输入和输出
        inputs = torch.tensor(data[i][0]).float()
        labels = torch.tensor(data[i][1]).float()

        # 前向传播和反向传播
        optimizer.zero_grad()
        outputs = net(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        # 统计损失值
        running_loss += loss.item()

    # 输出损失值
    if epoch % 100 == 99:
        print('[%d] loss: %.3f' % (epoch + 1, running_loss / len(data)))

在这个示例中,我们首先定义了一个名为criterion的损失函数,使用PyTorch的nn.MSELoss函数来定义均方误差损失函数。然后,我们定义了一个名为optimizer的优化器,使用PyTorch的optim.SGD函数来定义随机梯度下降优化器。接着,我们使用PyTorch的for循环来训练神经网络模型。在每个epoch中,我们使用PyTorch的for循环来遍历数据集,并使用PyTorch的tensor函数将输入和输出转换为张量。然后,我们使用PyTorch的zero_grad函数来清除梯度,使用PyTorch的forward函数进行前向传播,使用PyTorch的backward函数进行反向传播,使用PyTorch的step函数更新参数。最后,我们使用PyTorch的item函数将损失值转换为标量,并输出损失值。

4. 模型测试

我们将使用测试数据集来测试神经网络模型的性能。以下是模型测试的示例代码:

# 定义测试数据集
test_data = np.array([[35], [36], [37], [38], [39], [40]])

# 测试神经网络模型
for i in range(len(test_data)):
    # 获取输入和输出
    inputs = torch.tensor(test_data[i][0]).float()

    # 进行预测
    outputs = net(inputs)
    predicted = outputs.item()

    # 输出预测结果
    print('Input: %.1f, Predicted: %.1f' % (test_data[i][0], predicted))

在这个示例中,我们首先定义了一个名为test_data的测试数据集,包含了一些最高气温。然后,我们使用PyTorch的for循环来遍历测试数据集,并使用PyTorch的tensor函数将输入转换为张量。接着,我们使用PyTorch的forward函数进行预测,并使用PyTorch的item函数将预测结果转换为标量。最后,我们输出预测结果。

5. 示例说明

以下是两个使用PyTorch进行气温预测和图像分类的示例说明:

5.1. 气温预测

我们可以使用PyTorch构建神经网络模型来预测气温。以下是气温预测的示例代码:

import torch
import torch.nn as nn
import numpy as np

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

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

# 创建神经网络模型
net = Net()

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

# 训练神经网络模型
for epoch in range(1000):
    running_loss = 0.0
    for i in range(len(data)):
        # 获取输入和输出
        inputs = torch.tensor(data[i][0]).float()
        labels = torch.tensor(data[i][1]).float()

        # 前向传播和反向传播
        optimizer.zero_grad()
        outputs = net(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        # 统计损失值
        running_loss += loss.item()

    # 输出损失值
    if epoch % 100 == 99:
        print('[%d] loss: %.3f' % (epoch + 1, running_loss / len(data)))

# 定义测试数据集
test_data = np.array([[35], [36], [37], [38], [39], [40]])

# 测试神经网络模型
for i in range(len(test_data)):
    # 获取输入和输出
    inputs = torch.tensor(test_data[i][0]).float()

    # 进行预测
    outputs = net(inputs)
    predicted = outputs.item()

    # 输出预测结果
    print('Input: %.1f, Predicted: %.1f' % (test_data[i][0], predicted))

在这个示例中,我们首先定义了一个名为Net的神经网络模型,该模型包含一个输入层、一个隐藏层和一个输出层。然后,我们使用PyTorch的nn.Module类来创建神经网络模型。接着,我们定义了一个名为criterion的损失函数,使用PyTorch的nn.MSELoss函数来定义均方误差损失函数。然后,我们定义了一个名为optimizer的优化器,使用PyTorch的optim.SGD函数来定义随机梯度下降优化器。接着,我们使用PyTorch的for循环来训练神经网络模型。在每个epoch中,我们使用PyTorch的for循环来遍历数据集,并使用PyTorch的tensor函数将输入和输出转换为张量。然后,我们使用PyTorch的zero_grad函数来清除梯度,使用PyTorch的forward函数进行前向传播,使用PyTorch的backward函数进行反向传播,使用PyTorch的step函数更新参数。最后,我们使用PyTorch的item函数将损失值转换为标量,并输出损失值。接着,我们定义了一个名为test_data的测试数据集,包含了一些最高气温。然后,我们使用PyTorch的for循环来遍历测试数据集,并使用PyTorch的tensor函数将输入转换为张量。接着,我们使用PyTorch的forward函数进行预测,并使用PyTorch的item函数将预测结果转换为标量。最后,我们输出预测结果。

5.2. 图像分类

我们可以使用PyTorch构建神经网络模型来进行图像分类。以下是图像分类的示例代码:

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

# 定义神经网络模型
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)
        self.relu = nn.ReLU()

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

# 创建神经网络模型
net = Net()

# 定义数据转换
transform = transforms.Compose([
    transforms.Resize(32),
    transforms.CenterCrop(32),
    transforms.ToTensor(),
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])

# 加载数据集
trainset = datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
testset = datasets.CIFAR10(root='./data', train=False, download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=True, num_workers=2)
testloader = torch.utils.data.DataLoader(testset, batch_size=4, shuffle=False, num_workers=2)

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

# 训练神经网络模型
for epoch in range(2):
    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

# 测试神经网络模型
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: %.2f %%' % (100 * correct / total))

在这个示例中,我们首先定义了一个名为Net的神经网络模型,该模型包含了卷积层、池化层和全连接层。然后,我们使用PyTorch的nn.Module类来创建神经网络模型。接着,我们定义了一个名为transform的数据转换,使用PyTorch的transforms.Compose函数来定义数据转换。然后,我们使用PyTorch的datasets.CIFAR10函数来加载CIFAR10数据集,并使用PyTorch的DataLoader函数来创建数据加载器。接着,我们定义了一个名为criterion的损失函数,使用PyTorch的nn.CrossEntropyLoss函数来定义交叉熵损失函数。然后,我们定义了一个名为optimizer的优化器,使用PyTorch的torch.optim.SGD函数来定义随机梯度下降优化器。接着,我们使用PyTorch的for循环来训练神经网络模型。在每个epoch中,我们使用PyTorch的for循环来遍历数据加载器,并使用PyTorch的zero_grad函数来清除梯度,使用PyTorch的forward函数进行前向传播,使用PyTorch的backward函数进行反向传播,使用PyTorch的step函数更新参数。最后,我们使用PyTorch的torch.no_grad函数来关闭梯度计算,使用PyTorch的torch.max函数来获取预测结果,使用PyTorch的item函数将预测结果转换为标量。最后,我们输出准确率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyTorch一小时掌握之神经网络气温预测篇 - Python技术站

(1)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Pytorch释放显存占用方式

    下面是关于Pytorch如何释放显存占用的完整攻略,包含两条示例说明。 1. 使用with torch.no_grad()释放显存 在Pytorch中,通过with语句使用torch.no_grad()上下文管理器可以释放显存,这个操作对于训练中不需要梯度计算的代码非常有用。 代码示例: import torch # 创建一个3000 * 3000的矩阵 t…

    PyTorch 2023年5月17日
    00
  • Pytorch快速入门及在线体验

    本文搭配了Pytorch在线环境,可以直接在线体验。 Pytorch是Facebook 的 AI 研究团队发布了一个基于 Python的科学计算包,旨在服务两类场合: 1.替代numpy发挥GPU潜能 ;2. 一个提供了高度灵活性和效率的深度学习实验性平台。 1.Pytorch简介 Pytorch是Facebook 的 AI 研究团队发布了一个基于 Pyth…

    2023年4月8日
    00
  • Pytorch 随机数种子设置

    一般而言,可以按照如下方式固定随机数种子,以便复现实验: # 来自相关于 GCN 代码: 例如 grand.py 等的代码 parser.add_argument(‘–seed’, type=int, default=42, help=’Random seed.’) np.random.seed(args.seed) torch.manual_seed(a…

    PyTorch 2023年4月6日
    00
  • 浅谈Pytorch中的torch.gather函数的含义

    浅谈PyTorch中的torch.gather函数的含义 在PyTorch中,torch.gather函数是一个非常有用的函数,它可以用来从输入张量中收集指定维度的指定索引的元素。本文将详细介绍torch.gather函数的含义,并提供两个示例来说明其用法。 1. torch.gather函数的含义 torch.gather函数的语法如下: torch.ga…

    PyTorch 2023年5月15日
    00
  • Pytorch中的学习率衰减及其用法详解

    PyTorch中的学习率衰减及其用法详解 在本文中,我们将介绍PyTorch中的学习率衰减及其用法。我们将使用两个示例来说明如何在PyTorch中使用学习率衰减。 学习率衰减 学习率衰减是一种优化算法,它可以在训练过程中逐渐降低学习率。这有助于模型在训练后期更好地收敛。在PyTorch中,我们可以使用torch.optim.lr_scheduler模块来实现…

    PyTorch 2023年5月15日
    00
  • pytorch resnet实现

    官方github上已经有了pytorch基础模型的实现,链接 但是其中一些模型,尤其是resnet,都是用函数生成的各个层,自己看起来是真的难受! 所以自己按照caffe的样子,写一个pytorch的resnet18模型,当然和1000分类模型不同,模型做了一些修改,输入48*48的3通道图片,输出7类。   import torch.nn as nn im…

    PyTorch 2023年4月6日
    00
  • pytorch之torchvision.transforms图像变换实例

    在PyTorch中,torchvision.transforms模块提供了一系列用于图像变换的函数。本文将提供两个示例说明,以展示如何使用torchvision.transforms模块进行图像变换。 示例1:使用torchvision.transforms进行图像旋转 在这个示例中,我们将使用torchvision.transforms模块对图像进行旋转操…

    PyTorch 2023年5月15日
    00
  • PyTorch Distributed Data Parallel使用详解

    在PyTorch中,我们可以使用分布式数据并行(Distributed Data Parallel,DDP)来加速模型的训练。在本文中,我们将详细讲解如何使用DDP来加速模型的训练。我们将使用两个示例来说明如何完成这些步骤。 示例1:使用单个节点的多个GPU训练模型 以下是使用单个节点的多个GPU训练模型的步骤: import torch import to…

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