pytorch-线性回归

25 篇文章 1 订阅
11 篇文章 2 订阅

1. 导入相应的包

import torch
import torch.nn as nn

2. 创建模型y=wx+b

class LinearModel(nn.Module):
    def __init__(self, ndim):
        super(LinearModel, self).__init__()
        self.ndim = ndim
        
        self.weight = nn.Parameter(torch.randn(ndim, 2))
        self.bias = nn.Parameter(torch.randn(1))
    
    def forward(self, x):
        # y = wx + b
        return x.mm(self.weight) + self.bias

3. 创建x输入并输出y

lm = LinearModel(5)
x = torch.randn(4, 5)
lm(x)

4. 获取模型参数的生成器

lm.named_parameters()

5. 将生成器转换为列表

list(lm.named_parameters())

6. 将模型参数转移到gpu上

lm.cuda()
list(lm.parameters())

7. 转换模型参数为半精度浮点数

lm.half()
list(lm.named_parameters())

8.实战-预测波士顿房价

No属性数据类型字段描述
1CRIMFloat城镇人均犯罪率
2ZNFloat占地面积超过2.5万平方英尺的住宅用地比例
3INDUSFloat城镇非零售业务地区的比例
4CHASInteger查尔斯河虚拟变量 (= 1 如果土地在河边;否则是0)
5NOXFloat一氧化氮浓度(每1000万份)
6RMFloat平均每居民房数
7AGEFloat在1940年之前建成的所有者占用单位的比例
8DISFloat与五个波士顿就业中心的加权距离
9RADInteger辐射状公路的可达性指数
10TAXFloat每10,000美元的全额物业税率
11PTRATIOFloat城镇师生比例
12BFloat1000(Bk - 0.63)^ 2其中Bk是城镇黑人的比例
13LSTATFloat人口中地位较低人群的百分数
14MEDVFloat(目标变量/类别属性)以1000美元计算的自有住房的中位数

波士顿房价数据集共有506条数据,13个特征

8.1 通过sklearn导入数据集
from sklearn .datasets import load_boston
8.2 读取数据,定义优化器、损失函数
boston = load_boston()
lm = LinearModel(13)
# 定义平方损失函数
criterion = nn.MSELoss()
# 定义优化器
optim = torch.optim.SGD(lm.parameters(), lr=1e-6)
# 将数据转换为tensor类型的数据
data = torch.tensor(boston["data"], requires_grad=True, dtype=torch.float32)
target = torch.tensor(boston["target"], dtype=torch.float32)
8.3 训练模型
for step in range(10000):
    # 计算模型预测的结果
    predict = lm(data)
    # 计算损失函数
    loss = criterion(predict, target)
    # 每100步输出一次信息
    if step and step % 1000 == 0:
        print("Loss: {:.4f}".format(loss.item()))
    
    # 梯度清零
    optim.zero_grad()
    # 反向传播
    loss.backward()
    optim.step()

9.使用tensorboard查看训练结果

9.1 下载tensorboard

conda install tensorboard

pip install future

9.2 修改训练代码
from torch.utils.tensorboard import SummaryWriter

# tesorboard输出类
writer = SummaryWriter()
# 训练
for step in range(10000):
    # 计算模型预测的结果
    predict = lm(data)
    # 计算损失函数
    loss = criterion(predict, target)
    
    writer.add_scalar("loss/train", loss, step)
    # 输出权重图
    writer.add_histogram("loss/weight", lm.weight, step)
    writer.add_histogram("loss/bias", lm.bias, step)
    
    # 每100步输出一次信息
    if step and step % 1000 == 0:
        print("Loss: {:.4f}".format(loss.item()))
    
    # 梯度清零
    optim.zero_grad()
    # 反向传播
    loss.backward()
    optim.step()
9.3 打开tensorboard
# 打开cmd,运行
tensorboard --logdir run文件夹地址 --host=127.0.0.1
# 访问127.0.0.1:6006
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值