李沐深度学习-线性回归文档记录

本文详细介绍了线性回归模型在房屋价格预测中的应用,包括模型定义(涉及权重和偏差)、通过训练数据集进行模型训练(包括损失函数、优化算法和批量梯度下降)、以及模型预测的过程。此外,还提及了神经网络图表示和PyTorch中矢量计算的实现,以及权重和偏差的初始化和学习率调整策略。
摘要由CSDN通过智能技术生成
线性回归输出是一个连续值,因此适用于回归问题:房价,气温,销售额



1. 模型定义
假设房屋价格取决于面积和房龄

价格 y,面积x1,房龄x2

模型;y^=x1w1+x2w2+b

w:权重
b:偏差  均为标量,均为线性回归模型的 模型参数
2.模型训练
定义:通过数据寻找特定的模型参数,是模型在数据上的误差尽可能小,这个过程叫做模型训练
(1):训练数据
    收集真实数据(训练数据集/训练集)
    一栋房屋被称为一个样本(sample),真实售价称作标签(label)
    用来预测label的两个因素叫做特征(feature),即房龄x2,面积x1

    X:特征   !!!!!x不是样本,样本包含特征
    Y:标签
    Y^:预测
    W:权重
(2):损失函数
   衡量误差的函数,这里也称为平方损失
   选取一个非负数作为误差,数值越低误差越小
   常用平方函数  l=1/2(y^(i)-y(i))^2
   通常使用训练数据集中的所有样本误差的平均来衡量模型预测的质量
   即:1/nΣl
   找出参数w1*,w2*,b*,来使l最小
(3):优化算法
    线性回归和平方误差的误差最小化问题可以用公式表达出来,这叫做解析解。大部分深度学习模型没有解析解。只能通过
    优化算法迭代模型参数来降低l的值,这种叫做数值解
    其中,mini-batch-SGD应用广泛:提前选一组模型参数的初始值,如随机提取,接下来参数进行多次迭代
    每次迭代减少l的值
    1.每次迭代中,随机均匀采样一个由固定数目训练样本组成的小批量 B  |B|:表示小批量样本个数/批量大小(batch-size)
    2.再求B中平均损失有关模型参数的导数(梯度),最后用此结果与预先设定的一个正数的乘积(学习率)作为模型参数在本次迭代的
    减小量
    近似解w,b的求解是损失函数对相应的w,b不断进行梯度下降获得的
   超参数:人为设定的参数,不是模型训练得出的
   调参:一般是指的调节超参数,通过反复试错找到适合超参数核实的值

3 模型预测
最小化损失函数的最优解:w1*,w2*,b*
模型预测近似解:w1^,w2^,b^
使用x1w1^+x2w2^+b^来预测的过程叫做模型预测


线性回归的表示方法:

1.神经网络图:
    单层神经网络包括输入层,输出层
    输入层是输入的特征x,输入个数也叫特征数/特征向量维度
    输出层中负责计算的单元称作神经元
    线性回归中,只有一个输出层,输出层的的计算完全依赖于输入层,所以这里的输出层也叫
    全连接层(fully-connected layer)/稠密层(dense layer)
2.矢量计算表达式:
    模型训练/预测时。常常会同时处理多个数据样本并用到矢量计算
    两个向量相加的两种方法:
        import torch
        from time import time

        a=torch.ones(1000)
        b=torch.ones(1000)
        向量相加的一种方法是。将两个向量按照元素注意做标量加法
        start=time()
        c=torch.zeros(1000)
        for i in range(1000:
            c[i]=a[i]+b[i]
        print(time()-start)
    另一种方法:
        将两个向量直接做矢量加法
        start=time()
        d=a+b
        print(time()-start)

    ▽符号表示梯度下降

nn模块的核心数据结构是Module,Module既可以表示神经网络中的某个层(layer),也可以表示
一个包含很多层的神经网络。
实际使用过程中,最常见的就是继承nn.Module,撰写自己的网络/层。
一个nn.Module实例应该包含一些层以及返回输出的前向传播方法。

from torch.nn import init
在layer每一层,pytorch会根据设置的features输入个数自动预先初始化对应权重,这里可以自己选择对其正态化
使用net之前需要预先将模型权重和偏差进行初始化,初始化一般会对其正态分布初始化  可以使用nn模块中的init模块里的normal_方法初始化
当net的定义使用的是自定义类时,网络层的权重访问方式为   net.linear.weight   一个特征对应一个权重
当net的定义方式使用的是Sequential模块,网络层权重访问方式是 net[0].weight
init.normal_(net.linear.weight/net[0].weight,mean=0,std=0.01)
bias 代表偏置
init.constant_(net[0].bias,val=0)   也可以直接修改bias   net[0].bias.data.fill_(0)

学习率的设置:
    1.统一设置
    2.网络各层设置自己的
    3.动态设置学习率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值