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文档的时候感到非常头大,罗列的公式以及各种令人眩晕的下标让入门新手不知所云…最初我以为torch.nn.conv1d的参数in_channel/out_channel表示图像的通道数,经过运行错误提示之后,才知道[in_channel,kernel_size]构成了卷积核。  loss函数中…

    2023年4月6日
    00
  • 训练一个图像分类器demo in PyTorch【学习笔记】

    【学习源】Tutorials > Deep Learning with PyTorch: A 60 Minute Blitz > Training a Classifier  本文相当于对上面链接教程中自认为有用部分进行的截取、翻译和再注释。便于日后复习、修正和补充。 边写边查资料的过程中猛然发现这居然有中文文档……不过中文文档也是志愿者翻译的,…

    2023年4月8日
    00
  • pytorch实现fine tuning

    cs231n notespytorch官方实现transfer learningPytorch_fine_tuning_Turtorial cs231n notes transfer learning 特征提取器:将预训练模型当成固定的模型,进行特征提取;然后构造分类器进行分类 微调预训练模型:可以将整个模型都进行参数更新,或者冻结前半部分网络,对后半段网络…

    PyTorch 2023年4月8日
    00
  • pytorch实现LeNet5代码小结

    目录 代码一 代码二 代码三 代码一 训练代码: import torch import torch.optim as optim import torch.nn as nn import torch.nn.functional as F import torchvision import torchvision.transforms as transfor…

    PyTorch 2023年4月8日
    00
  • Pytorch上下采样函数–interpolate用法

    PyTorch上下采样函数–interpolate用法 在PyTorch中,interpolate函数是一种用于上下采样的函数。在本文中,我们将介绍PyTorch中interpolate的用法,并提供两个示例说明。 示例1:使用interpolate函数进行上采样 以下是一个使用interpolate函数进行上采样的示例代码: import torch i…

    PyTorch 2023年5月16日
    00
  • pytorch 常用函数 max ,eq说明

    PyTorch 常用函数 max, eq 说明 PyTorch 是一个广泛使用的深度学习框架,提供了许多常用的函数来方便我们进行深度学习模型的构建和训练。本文将详细讲解 PyTorch 中常用的 max 和 eq 函数,并提供两个示例说明。 1. max 函数 max 函数用于返回输入张量中所有元素的最大值。以下是 max 函数的语法: torch.max(…

    PyTorch 2023年5月16日
    00
  • pytorch 生成随机数;linspace();torch.logspace();ones/zeros/eye

    在使用PyTorch做实验时经常会用到生成随机数Tensor的方法,比如: torch.rand() torch.randn() torch.rand_like() torch.normal()   torch.linespace() 在很长一段时间里我都没有区分这些方法生成的随机数究竟有什么不同,由此在做实验的时候经常会引起一些莫名其妙的麻烦。 所以在此做…

    PyTorch 2023年4月8日
    00
  • pytorch实现kaggle猫狗识别

    参考:https://blog.csdn.net/weixin_37813036/article/details/90718310 kaggle是一个为开发商和数据科学家提供举办机器学习竞赛、托管数据库、编写和分享代码的平台,在这上面有非常多的好项目、好资源可供机器学习、深度学习爱好者学习之用。碰巧最近入门了一门非常的深度学习框架:pytorch(如果你对p…

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