0801学习日志

部署运行你感兴趣的模型镜像

1.    在 PyTorch 中,优化器(torch.optim)在处理参数时可以对不同的参数进行单独配置。

       示例:

optimizer = torch.optim.SGD([

                            {"params":model[0].weight,'weight_decay': wd},

                            {"params":model[0].bias}],

                            lr=lr ,                                                                            )

优化器接收的参数是一个字典列表([{"params": ..., "配置1": ...}, {"params": ..., "配置2": ...}]),每个字典代表一组参数及其专属配置,以及全局配置(lr=lr), 优化器会合并全局配置和组内配置,按组迭代参数并更新,这种设计提高了控制参数的灵活性。

2.    对于某些特殊的误差(如:房价预测,股票收益),绝对化的数值衡量欠妥,不符合评判标准

(以预测房价为例,

        真实值 100 万,预测值 110 万 → 绝对误差 10 万;

        真实值 1000 万,预测值 1100 万 → 绝对误差 100 万,

        但两者的相对误差都为10%)

这时,寻找相应的相对误差衡量方式对于模型训练更为有效:

                   Loss =   

因为:

所以当Loss 很小时,取泰勒近似:

从而将Loss从差值尺度转化为对数尺度,预防了数值溢出。

3.    如果在训练模型时发生“损失曲线有时是正常指数衰减(损失稳步下降),有时呈噪声波形(损失剧烈波动)”的现象,表明模型训练时处于稳定拟合与不稳定拟合的临界处,核心原因在于训练中存在某些 “不稳定触发因素”, 微小的初始差异(如随机种子、数据批次、初始参数)就会导致训练走向两种极端。

                     正常拟合时的损失曲线                                    异常拟合时的损失曲线

原因与解决方法;

1> 数据批次的分布不稳定,每次训练特征存在偏移:

          增大batch_size的大小,减小数据的随机性,提高数据稳定性。

2> 学习率超过损失曲线稳定收敛的临界值:

 设置更小的lr值,确保梯度下降在可控范围内。

3> 随机因素影响过大,如:固定了随机种子,过大的dropout概率:

 尝试减小模型的随机性。

4> 模型存在梯度不稳定结构:

 使用如torch.nn.utils.clip_grad_norm_(model.parameters(),  max_norm=/*梯度所能达到的最大范数*/, norm_type=/*范数类型*/ )控制梯度

4.    在python pandas中使用pandas.get_dummies()为数据独热编码时,最好先将训练数据与验证数据合二为一,避免某一数据集存在另一个没有的特征类型,如:

颜色:

训练集

              验证集

如果已经转换,也可以使用使用pandas.DataFrame.align() 对齐,将参数join=设置为:outer #取并集 。

5.    独热编码可能导致特征维度激增(高基数类别特征会生成大量稀疏特征),增加模型学习难度,容易引发梯度波动。这时采用频率编码可以大大缩减内存开支,降低了数据的维度,使模型更容易捕捉到类别与目标变量之间的关系。
       例如:

import pandas as pd
data = { 'category': ['A', 'B', 'A', 'C', 'B', 'A', 'D'] }
df = pd.DataFrame(data)

# 计算每个类别的频率
freq_map = df['category'].value_counts(normalize=True).to_dict()

# 进行频率编码
df['category_freq_encoded'] = df['category'].map(freq_map)

print(df)
# end

6.    在某些情况下需要模型仅输出正数(如:价格预测,年龄),而使用torch.clamp会中断范围外的梯度,这时在模型输出端末尾添加nn.ReLU()或nn.Softplus()可以在保证梯度存在的情况下将模型输出限制在正数。

您可能感兴趣的与本文相关的镜像

PyTorch 2.6

PyTorch 2.6

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值