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

yizhihongxing

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框架学习 — 2. 计算图、autograd以及逻辑回归的实现

    1. 计算图 使用计算图的主要目的是使梯度求导更加方便。 import torch w = torch.tensor([1.], requires_grad=True) x = torch.tensor([2.], requires_grad=True) a = torch.add(w, x) # retain_grad() b = torch.add(w,…

    2023年4月8日
    00
  • 怎么在conda虚拟环境中配置cuda+cudnn+pytorch深度学习环境

    本文小编为大家详细介绍“怎么在conda虚拟环境中配置cuda+cudnn+pytorch深度学习环境”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么在conda虚拟环境中配置cuda+cudnn+pytorch深度学习环境”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 下面的操作默认你安装好了python 一、conda创建…

    2023年4月5日
    00
  • PyTorch实现Seq2Seq机器翻译

    Seq2Seq简介 Seq2Seq由Encoder和Decoder组成,Encoder和Decoder又由RNN构成。Encoder负责将输入编码为一个向量。Decoder根据这个向量,和上一个时间步的预测结果作为输入,预测我们需要的内容。 Seq2Seq在训练阶段和预测阶段稍有差异。如果Decoder第一个预测预测的输出就错了,它会导致“蝴蝶效应“,影响后…

    2023年4月8日
    00
  • [Pytorch]Pytorch中图像的基本操作(TenCrop)

    转自:https://www.jianshu.com/p/73686691cf13 下面是几种常写的方式 第一种方式 normalize = transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) transformList = [] transformList.append(tr…

    PyTorch 2023年4月8日
    00
  • pytorch打印模型结构图

    import torchsummary from torchvision.models.resnet import * net = resnet18().cuda() print(net)  打印出来的结果是以文本形式显示, 显示出模型的每一层是由什么层构成的,一般来说深度卷积网络是由结构类似的基本模块组成,内部参数会有区别。 查看模型结构主要是为了看在某些…

    PyTorch 2023年4月7日
    00
  • pytorch 创建tensor的几种方法

    tensor默认是不求梯度的,对应的requires_grad是False。 1.指定数值初始化 import torch #创建一个tensor,其中shape为[2] tensor=torch.Tensor([2,3]) print(tensor)#tensor([2., 3.]) #创建一个shape为[2,3]的tensor tensor=torch…

    PyTorch 2023年4月7日
    00
  • PyTorch Softmax

    PyTorch provides 2 kinds of Softmax class. The one is applying softmax along a certain dimension. The other is do softmax on a spatial matrix sized in B, C, H, W. But it seems like…

    2023年4月8日
    00
  • pytorch loss总结与测试

      pytorch loss 参考文献: https://blog.csdn.net/zhangxb35/article/details/72464152?utm_source=itdadao&utm_medium=referral loss 测试 import torch from torch.autograd import Variable ”…

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