预测房价的模型训练,完整代码如下:

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

训练模型

我目前认知的模型训练,核心就是把问题转换为张量后,通过和参数计算得到结果后与标准答案对比求出误差,再反向传播通过链式法则去降梯度,最终是参数达到一个拟合的状态。
训练步骤:

  1. 模型前向传播计算预测值
  2. 用损失函数计算误差
  3. 反向传播自动求梯度
  4. 优化器按梯度更新参数
  5. 迭代直到参数拟合数据

泛化

训练完成后,模型对没见过的数据也能做出合理预测,这就是泛化能力。
比如代码中用 90 平米(不在训练数据中)测试,模型依然能给出合理价格。
任何有规律的数据,都可以通过训练让模型参数拟合规律,从而获得“举一反三”的能力。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐