PyTorch入门第一课:从零实现房价预测模型
·
第一个Pytorch案例
预测房价的模型训练,完整代码如下:
import torch
# 把数据转换为PyTorch张量
area = torch.tensor([[50], [60], [80], [100], [120]], dtype=torch.float32) # 房子大小
price = torch.tensor([[150], [180], [240], [300], [360]], dtype=torch.float32) # 房子价格
# 定义模型,1个输入,1个输出
model = torch.nn.Linear(1,1)
# 选择损失函数
loss_fn = torch.nn.MSELoss()
# 选择优化器
optimizer = torch.optim.SGD(model.parameters(), lr = 0.0001)
# 开始训练模型
for epoch in range(1000):
pred = model(area) # 加载原始数据。这里是房子大小
loss = loss_fn(pred, price) # 计算与目标数据即房子价格的误差
optimizer.zero_grad() # 清空梯度
loss.backward() # 进行反向传播以计算梯度
optimizer.step() # 梯度下降更新参数
if epoch % 100 == 0:
print(f"第{epoch:4d}步, 误差: {loss.item():.4f}")
with torch.no_grad():
test_area = torch.tensor([[90.0]]) # 任意输入一个数据
pred_price = model(test_area) # 开始推理,并返回结果
print(f"\n🏠 面积 90 平米,预测价格: {pred_price.item():.1f} 万元")
总结:
Tensor数据转换
把需要训练的数据转换为Tensor,这里使用的数据是数字,可以直接带入。如果是非数字数据,则需要先转换为数字,比如文字一般需要先分词,术语Tokenization
训练模型
我目前认知的模型训练,核心就是把问题转换为张量后,通过和参数计算得到结果后与标准答案对比求出误差,再反向传播通过链式法则去降梯度,最终是参数达到一个拟合的状态。
训练步骤:
- 模型前向传播计算预测值
- 用损失函数计算误差
- 反向传播自动求梯度
- 优化器按梯度更新参数
- 迭代直到参数拟合数据
泛化
训练完成后,模型对没见过的数据也能做出合理预测,这就是泛化能力。
比如代码中用 90 平米(不在训练数据中)测试,模型依然能给出合理价格。
任何有规律的数据,都可以通过训练让模型参数拟合规律,从而获得“举一反三”的能力。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)