当前位置: 首页 > news >正文

小白的进阶之路-人工智能从初步到精通pytorch的基本流程详解-1

Pytorch大致流程一览表:

主题内容
1 准备数据数据几乎可以是任何东西,但在开始之前,我们将创建一条简单的直线
2 建立模型在这里,我们将创建一个模型来学习数据中的模式,我们还将选择损失函数,优化器并构建一个训练循环。
3 拟合模型我们已经有了数据和模型,现在让模型尝试在(训练)数据中找到模式。
4预测和评估模型(推断)我们的模型在数据中发现了模式,让我们将其发现与实际(测试)数据进行比较。
5 保存和载入模型您可能希望在其他地方使用您的模型,或者稍后再使用它,我们将在这里介绍它。
6 结合让我们把上面所有的东西结合起来。

好了,现在我们开始!

我们去将使用torch,torch.nn (nn代表神经网络,这个包包含在PyTorch中创建神经网络的构建块)和matplotlib。

import torch
from torch import nn # nn contains all of PyTorch's building blocks for neural networks
import matplotlib.pyplot as plt# Check PyTorch version
print(torch.__version__)

输出为:

2.7.0+cu118

下面进入第一个主题

1 数据准备

机器学习是一个由两部分组成的游戏:

首先,把你的数据,不管它是什么,转换成数字(一种表示)。

最后,选择或构建一个模型来尽可能地学习表征。

有时这两个步骤可以同时完成。

但是如果你没有数据呢?

嗯,这就是我们现在的处境。

没有数据。

但是我们可以创造一些。

让我们将数据创建为一条直线。

我们将使用线性回归来创建具有已知参数的数据(可以通过模型学习的东西),然后我们将使用PyTorch来查看我们是否可以构建模型来使用梯度下降来估计这些参数。

如果上面的术语现在没有多大意义,不要担心,我们将看到它们的实际应用,我将在下面提供额外的资源,以便您可以了解更多信息。

# Create *known* parameters
weight = 0.7
bias = 0.3# Create data
start = 0
end = 1
step = 0.02
X = torch.arange(start, end, step).unsqueeze(dim=1)
y = weight * X + biasprint(X[:10])
print( y[:10])

输出为:

tensor([[0.0000],[0.0200],[0.0400],[0.0600],[0.0800],[0.1000],[0.1200],[0.1400],[0.1600],[0.1800]])
tensor([[0.3000],[0.3140],[0.3280],[0.3420],[0.3560],[0.3700],[0.3840],[0.3980],[0.4120],[0.4260]])

现在我们将着手构建一个可以学习X(特征)和y(标签)之间关系的模型。

将数据分成训练集和测试集

我们有一些数据。

但在我们建立模型之前,我们需要把它拆开。

机器学习项目中最重要的步骤之一是创建一个训练和测试集(如果需要,还可以创建一个验证集)。

数据集的每次拆分都有一个特定的目的:

拆分项目的数据比例频率
训练集模型从这些数据中学习(比如你在学期中学习的课程材料)60~80%总是
验证集模型会根据这些数据进行调整(就像期末考试前的练习考试一样)10~20%经常
测试集模型根据这些数据进行评估,以测试它学到了什么(就像你在学期末参加的期末考试一样)10~20%总是

现在,我们只使用一个训练和测试集,这意味着我们将有一个数据集供我们的模型学习和评估。

我们可以通过分割X和y张量来创建它们。

[!CAUTION]

注意:当处理真实数据时,这一步通常在项目开始时完成(测试集应该始终与所有其他数据分开)。我们希望我们的模型从训练数据中学习,然后在测试数据上评估它,以获得它对未见过的例子的泛化程度的指示。

# Create train/test split
train_split = int(0.8 * len(X)) # 80% of data used for training set, 20% for testing 
X_train, y_train = X[:train_split], y[:train_split]
X_test, y_test = X[train_split:], y[train_split:]print(len(X_train))
print( len(y_train))
print( len(X_test))
print( len(y_test))

输出为:

40
40
10
10

很好,我们有40个训练样本(X_train & y_train)和10个测试样本(X_test & y_test)。

我们创建的模型将尝试学习X_train和y_train之间的关系,然后我们将评估它在X_test和y_test上的学习结果。

但现在我们的数据只是页面上的数字。

让我们创建一个函数来形象化。

def plot_predictions(train_data=X_train, train_labels=y_train, test_data=X_test, test_labels=y_test, predictions=None):"""Plots training data, test data and compares predictions."""plt.figure(figsize=(10, 7))# Plot training data in blueplt.scatter(train_data, train_labels, c="b", s=4, label="Training data")# Plot test data in greenplt.scatter(test_data, test_labels, c="g", s=4, label="Testing data")if predictions is not None:# Plot the predictions in red (predictions were made on the test data)plt.scatter(test_data, predictions, c="r", s=4, label="Predictions")# Show the legendplt.legend(prop={"size": 14});plot_predictions()
plt.show()  

结果为:

在这里插入图片描述

现在我们的数据不再是纸上的数字,而是一条直线。

[!CAUTION]

注意:现在是向您介绍数据浏览器的座右铭的好时机……“具象化!”

当你在处理数据并将其转化为数字时,想想这个,如果你能将一些东西形象化,它就会对理解产生神奇的作用。

机器喜欢数字,我们人类也喜欢数字,但我们也喜欢观察事物。

2 构建模型

现在我们有了一些数据,让我们建立一个模型,用蓝点来预测绿点。

我们马上就开始。

我们将首先编写代码,然后解释所有内容。

让我们使用纯PyTorch复制一个标准线性回归模型。

# Create a Linear Regression model class
class LinearRegressionModel(nn.Module): # <- almost everything in PyTorch is a nn.Module (think of this as neural network lego blocks)def __init__(self):super().__init__() self.weights = nn.Parameter(torch.randn(1, # <- start with random weights (this will get adjusted as the model learns)dtype=torch.float), # <- PyTorch loves float32 by defaultrequires_grad=True) # <- can we update this value with gradient descent?)self.bias = nn.Parameter(torch.randn(1, # <- start with random bias (this will get adjusted as the model learns)dtype=torch.float), # <- PyTorch loves float32 by defaultrequires_grad=True) # <- can we update this value with gradient descent?))# Forward defines the computation in the modeldef forward(self, x: torch.Tensor) -> torch.Tensor: # <- "x" is the input data (e.g. training/testing features)return self.weights * x + self.bias # <- this is the linear regression formula (y = m*x + b)

好了,上面有很多内容,但是让我们一点一点地分解。

PyTorch模型构建要领

PyTorch有四个基本模块,你可以用它来创建几乎任何你能想到的神经网络。

他们是torch. nn, torch. optim, torch.utils.data.Dataset 以及torch.utils.data.DataLoader.。现在,我们将重点关注前两个,稍后再讨论另外两个(尽管您可能能够猜到它们的作用)。

PyTorch 模块功能
torch. nn包含计算图的所有构建块(本质上是以特定方式执行的一系列计算)
torch.nn.Parameter存储可与nn. module一起使用的张量。如果requires_grad=True梯度(用于通过梯度下降更新模型参数)是自动计算的,这通常被称为“autograd”
torch.nn.Module所有神经网络模块的基类,神经网络的所有构建块都是子类。如果你在PyTorch中构建一个神经网络,你的模型应该继承nn.Module。需要实现forward()方法。
torch.optim包含各种优化算法(这些算法告诉模型参数存储在nn中。参数如何最好地改变,以改善梯度下降,从而减少损失)。
def forward()所有的神经网络。模块子类需要forward()方法,该方法定义了将在传递给特定nn的数据上进行的计算。模块(例如上面的线性回归公式)

如果上面听起来很复杂,可以这样想,PyTorch神经网络中的几乎所有内容都来自torch.nn,

torch.nn.Module包含较大的构建块(层)

torch.nn.Parameter包含较小的参数,如权重和偏差(将这些放在一起创建nn. module (s))

forward() 告诉较大的块如何对nn. module (s)中的输入(充满数据的张量)进行计算。

torch.optim包含了如何改进nn内参数的优化方法。参数以更好地表示输入数据

检查PyTorch模型的内容

现在我们已经解决了这些问题,让我们用我们创建的类创建一个模型实例,并使用.parameters()检查它的参数。

# Set manual seed since nn.Parameter are randomly initialized
torch.manual_seed(42)# Create an instance of the model (this is a subclass of nn.Module that contains nn.Parameter(s))
model_0 = LinearRegressionModel()# Check the nn.Parameter(s) within the nn.Module subclass we created
print(list(model_0.parameters()))

输出为:

[Parameter containing:
tensor(

相关文章:

  • 深入解析Spring Boot与Spring Cloud在微服务架构中的最佳实践
  • nginx日志
  • 人员管理2302版本
  • CVE-2022-22963源码分析与漏洞复现
  • 类autosar的os系统实现
  • 说一下响应状态码有哪些?
  • 语言幻觉测试用例及相关策略总结
  • SAP学习笔记 - 开发13 - CAP 之 添加数据库支持(Sqlite)
  • plc基础知识整理(三菱)
  • SVN与蓝盾流水线
  • 依赖错误终结者:AI 项目管理中的故障排查指南
  • python训练营day29
  • C++类与对象--5 运算符重载
  • 【Canvas与图标】圆角方块蓝星CSS图标
  • 纯前端实现图文识别 OCR
  • 异步委托执行管理器:更新
  • 嵌入式培训之数据结构学习(六)树(二叉树)、哈希表、内核链表
  • 理解 Swift 逃逸闭包与 implicit `self`
  • virtual下Ubuntu24.04版本上配置网络与外网和宿主机之间互通
  • ros2-类继承,lambda,共享指针,多线程
  • 遇见东方:18世纪俄罗斯宫殿中的“中国风”
  • 热点问答:特朗普与俄乌总统分别通话,他们谈了什么
  • 国家发改委:不断完善稳就业稳经济的政策工具箱,确保必要时能够及时出台实施
  • 国家发改委:系统谋划7方面53项配套举措,推动民营经济促进法落地见效
  • 人民日报任平:从“地瓜经济”理论到民营经济促进法,读懂中国经济的成长壮大之道
  • 鸿蒙电脑正式发布,国产操作系统在个人电脑领域实现重要突破