PyTorch系统教程:PyTorch入门项目(简单线性回归)
- IT业界
- 2025-08-24 12:03:02

PyTorch是一个开源机器学习库,广泛用于计算机视觉和自然语言处理等深度学习应用。在本指南中,我们将介绍设置PyTorch和启动第一个项目的过程,强调代码示例的清晰度。
开始使用PyTorch在开始设置PyTorch之前,请确保系统上安装了Python。建议使用Python 3.7或更高版本。你可以从Python官方网站下载Python。
步骤1:设置虚拟环境
最佳实践是为Python项目创建一个虚拟环境,以便有效地管理依赖关系。使用以下命令创建和激活虚拟环境:
# Install virtualenv if it's not installed git $ pip install virtualenv # Create a virtual environment named `pytorch-env` $ virtualenv pytorch-env # Activate the virtual environment (Linux and macOS) $ source pytorch-env/bin/activate # Activate the virtual environment (Windows) $ .\pytorch-env\Scripts\activate一旦虚拟环境被激活,您的终端应该反映这个状态。
步骤2:安装PyTorch
激活虚拟环境后,现在可以安装PyTorch了。安装命令可能因系统配置(cpu或GPU)而异。你可以访问PyTorch网站获取最新的安装命令。下面是安装具有CPU支持的PyTorch的示例命令:
$ pip install torch torchvision对于那些支持cuda的GPU,命令可能看起来像这样:
$ pip install torch torchvision torchaudio --index-url download.pytorch.org/whl/cu118确保特定版本与您的硬件和CUDA版本兼容。
PyTorch项目:简单线性回归安装PyTorch之后,让我们创建一个基本的项目来演示PyTorch是如何工作的。我们将从一个简单的线性回归模型开始,从x预测y。
步骤3:导入PyTorch
首先创建新的Python文件,比如linear_regression.py,并导入必要的库:
import torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F步骤4:定义模型
创建简单线性回归模型,使用Pytorch神经网络模块:
class LinearRegressionModel(nn.Module): def __init__(self): super(LinearRegressionModel, self).__init__() self.linear = nn.Linear(1, 1) # one input and one output def forward(self, x): return self.linear(x)super() 函数
super() 是一个内置函数,用于调用父类的方法。它返回一个代理对象,该对象可以访问父类的方法。在这里,super(LinearRegressionModel, self) 表示从 LinearRegressionModel 类的父类(即 nn.Module)中获取一个代理对象。LinearRegressionModel
LinearRegressionModel 是当前类的名称。通过将其作为第一个参数传递给 super(),我们告诉 Python 我们希望从这个类的父类中调用方法。self
self 是当前类实例的引用。它允许我们在类的方法中访问实例的属性和方法。__init__() 方法
__init__() 是一个特殊的方法,用于初始化类的实例。在这里,它是 nn.Module 类的构造函数。调用 super(LinearRegressionModel, self).__init__() 的目的是确保父类 nn.Module 的初始化逻辑被执行。这通常包括设置一些内部状态和属性,这些状态和属性对于 PyTorch 的模型功能是必需的。步骤5:初始化模型、损失和优化器
接下来,实例化模型,定义损失函数,并选择优化器:
# Initialize the model, loss function and the optimizer model = LinearRegressionModel() criterion = nn.MSELoss() optimizer = optim.SGD(model.parameters(), lr=0.01)第六步:训练模型
使用简单的训练循环来更新模型的权重:
# Sample data X_train = torch.tensor([[1.0], [2.0], [3.0], [4.0]]) y_train = torch.tensor([[2.0], [4.0], [6.0], [8.0]]) # Training loop n_epochs = 1000 for epoch in range(n_epochs): # Forward pass: Compute predicted y by passing x to the model y_pred = model(X_train) # Compute the loss loss = criterion(y_pred, y_train) # Zero gradients, perform a backward pass, and update the weights. optimizer.zero_grad() loss.backward() optimizer.step() if (epoch+1) % 100 == 0: print(f'Epoch {epoch+1}: loss = {loss.item():.4f}')训练之后,你的模型就可以进行预测了。
步骤7:测试模型
使用你训练过的模型来测试新的数据:
with torch.no_grad(): # Disables gradient calculation X_test = torch.tensor([[5.0]]) y_test_pred = model(X_test) print(f'Predicted value for input 5.0: {y_test_pred.item():.4f}')就是这样!你已经成功地设置了PyTorch,并从头构建了一个简单的线性回归模型。
完整代码 import torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F class LinearRegressionModel(nn.Module): def __init__(self): super(LinearRegressionModel, self).__init__() self.linear = nn.Linear(1, 1) # one input and one output def forward(self, x): return self.linear(x) # Initialize the model, loss function and the optimizer model = LinearRegressionModel() criterion = nn.MSELoss() optimizer = optim.SGD(model.parameters(), lr=0.01) # Sample data X_train = torch.tensor([[1.0], [2.0], [3.0], [4.0]]) y_train = torch.tensor([[2.0], [4.0], [6.0], [8.0]]) # Training loop n_epochs = 1000 for epoch in range(n_epochs): # Forward pass: Compute predicted y by passing x to the model y_pred = model(X_train) # Compute the loss loss = criterion(y_pred, y_train) # Zero gradients, perform a backward pass, and update the weights. optimizer.zero_grad() loss.backward() optimizer.step() if (epoch+1) % 100 == 0: print(f'Epoch {epoch+1}: loss = {loss.item():.4f}') with torch.no_grad(): # Disables gradient calculation X_test = torch.tensor([[5.0]]) y_test_pred = model(X_test) print(f'Predicted value for input 5.0: {y_test_pred.item():.4f}') 自动结束训练训练循环的结束条件可以通过多种方式进行动态设置,而不是硬编码为固定的 n_epochs。以下是一些常见的方法,可以根据特定条件自动结束训练循环:
1. 提前停止(Early Stopping)提前停止是一种常用的技术,当验证集的性能不再改善时,停止训练。这可以防止过拟合。实现方法如下:
# 假设有一个验证集 X_val = torch.tensor([[1.5], [2.5], [3.5], [4.5]]) y_val = torch.tensor([[3.0], [5.0], [7.0], [9.0]]) best_loss = float('inf') patience = 10 # 允许的无改善的epoch数 counter = 0 for epoch in range(n_epochs): # 训练步骤... # 计算验证损失 with torch.no_grad(): y_val_pred = model(X_val) val_loss = criterion(y_val_pred, y_val) # 检查验证损失是否改善 if val_loss < best_loss: best_loss = val_loss counter = 0 # 重置计数器 else: counter += 1 # 如果验证损失在一定的epoch内没有改善,则停止训练 if counter >= patience: print(f'Early stopping at epoch {epoch+1}') break 2. 达到目标损失可以设置一个目标损失,当损失达到该目标时停止训练:
target_loss = 0.01 # 设定目标损失 for epoch in range(n_epochs): # 训练步骤... # 计算损失 loss = criterion(y_pred, y_train) # 检查是否达到目标损失 if loss.item() < target_loss: print(f'Target loss reached at epoch {epoch+1}') break 3. 训练时间限制可以设置一个最大训练时间,超过该时间后停止训练:
import time start_time = time.time() max_time = 60 # 最大训练时间(秒) for epoch in range(n_epochs): # 训练步骤... # 检查是否超过最大时间 if time.time() - start_time > max_time: print(f'Max training time reached at epoch {epoch+1}') break 4. 动态调整学习率虽然这不是直接的停止条件,但可以根据训练过程中的损失动态调整学习率,并在损失不再改善时停止训练。
通过这些方法,可以使训练过程更加灵活和高效,避免不必要的计算和过拟合。选择合适的停止条件取决于具体的任务和数据集。
最后总结PyTorch提供了开发复杂机器学习模型所需的灵活性、可扩展性和可访问性。本指南是你PyTorch之旅的第一步。随着你获得更多的经验,可以探索更高级的主题,例如使用gpu进行更快的计算和实现其他类型的神经网络。
PyTorch系统教程:PyTorch入门项目(简单线性回归)由讯客互联IT业界栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“PyTorch系统教程:PyTorch入门项目(简单线性回归)”