返回
实现线性回归的简洁方法:动手学深度学习3.3
人工智能
2024-01-17 09:07:24
通过实战打造深度学习基础,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()}')