返回

实现线性回归的简洁方法:动手学深度学习3.3

人工智能

通过实战打造深度学习基础,3.3章用Python玩转线性回归模型,不仅有趣还能涨知识。我们无需亲自动手编写代码,只需依赖pytorch的nn模块。

大家好,欢迎来到深度学习之旅的第三章。今天,我们将学习如何使用PyTorch库构建一个线性回归模型。线性回归是一种监督学习算法,用于预测连续值(如房屋价格或股票价格)。

PyTorch是一个流行的深度学习库,以其易用性和灵活性而著称。在本教程中,我们将使用PyTorch的nn模块来构建我们的线性回归模型。nn模块提供了许多预先构建的神经网络层,使我们能够快速轻松地构建复杂的神经网络。

1. 导入必要的库

import torch
import numpy as np

2. 创建数据

我们将在一个简单的数据集上训练我们的模型。该数据集包含100个数据点,每个数据点由两个特征组成。特征1是房屋的面积,特征2是房屋的价格。

X = np.array([[100, 200], [200, 300], [300, 400], [400, 500], [500, 600]])
y = np.dot(X, np.array([1, 2])) + 3

3. 创建模型

我们的模型将是一个简单的线性回归模型,由一个输入层、一个隐藏层和一个输出层组成。输入层有2个神经元,隐藏层有10个神经元,输出层有1个神经元。

model = torch.nn.Sequential(
    torch.nn.Linear(2, 10),
    torch.nn.ReLU(),
    torch.nn.Linear(10, 1)
)

4. 定义损失函数和优化器

我们将使用均方误差(MSE)作为损失函数,并使用Adam优化器来训练模型。

loss_fn = torch.nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)

5. 训练模型

我们将模型在数据集上训练100个epoch。在每个epoch中,我们将使用优化器更新模型的权重。

for epoch in range(100):
    # 将模型置于训练模式
    model.train()

    # 将数据转换为Tensor
    X_tensor = torch.from_numpy(X).float()
    y_tensor = torch.from_numpy(y).float()

    # 前向传播
    y_pred = model(X_tensor)

    # 计算损失
    loss = loss_fn(y_pred, y_tensor)

    # 反向传播
    loss.backward()

    # 更新模型权重
    optimizer.step()

    # 将模型置于评估模式
    model.eval()

    # 计算训练集上的损失
    loss_train = loss_fn(model(X_tensor), y_tensor).item()

    # 计算验证集上的损失
    loss_val = loss_fn(model(X_tensor), y_tensor).item()

    # 打印损失
    print(f'Epoch: {epoch + 1}, Loss Train: {loss_train}, Loss Val: {loss_val}')

6. 评估模型

在训练模型之后,我们可以通过计算模型在测试集上的准确率来评估模型的性能。

# 将模型置于评估模式
model.eval()

# 计算测试集上的损失
loss_test = loss_fn(model(X_tensor), y_tensor).item()

# 打印损失
print(f'Loss Test: {loss_test}')

7. 预测

我们还可以使用模型来预测新的数据点。

# 创建一个新的数据点
X_new = np.array([[150, 250]])

# 将数据转换为Tensor
X_new_tensor = torch.from_numpy(X_new).float()

# 预测
y_pred = model(X_new_tensor)

# 打印预测
print(f'Predicted Price: {y_pred.item()}')