深度学习常见问题每日学习

1.Dataset 和 Dataloader 的区别。

都是来自工具pytorch。

Dataset :dataset 来自torch.utils.data.Dataset,是代表数据的基类,我们自定义的数据类可以通过继承和重写这个抽象类的__getitem__和__len__函数实现。

__getitem__:通过index访问数据,能够同时返回数据和类别对应的标签,这里数据和标签为tensor类型。

_len__:获取数据的个数。

Dataloader:dataloader是处理模式输入数据的一个工具类。组合了数据集加采样器,并在数据集上提供单线程和多线程的可迭代对象。

epoch:      所有的训练样本输入到模型中称为一个epoch;
iteration:  一批样本输入到模型中,成为一个Iteration;
batchszie:批大小,决定一个epoch有多少个Iteration;
迭代次数(iteration)=样本总数/批尺寸(batchszie)

函数原型:

torch.utils.data.DataLoader(dataset, batch_size=1, 
    shuffle=False, sampler=None, 
    batch_sampler=None, num_workers=0, 
    collate_fn=None, pin_memory=False, 
    drop_last=False, timeout=0, 
    worker_init_fn=None, multiprocessing_context=None)

2.深度学习中常见的损失函数有那些?

[1]针对分类任务

--多分类任务的交叉熵损失函数:

--二分类任务的交叉熵损失函数:

--focal loss 解决难易样本数量不均衡问题和正负样本数量不均衡问题。

focal loss 存在的问题就是:

1.参数的选择对收敛有影响。

2.关注困难样本会导致过分关注噪声点、离群点,反而不易收敛。

[2]针对回归任务

--MAE损失(Mean Absolute Loss)也被称为L1loss,是以绝对误差作为度量。

--MSE损失(Mean Square Loss)也被称为L2Loss,是以误差的平方和作为度量。

异常值
MSE对异常值敏感,因为它的惩罚是平方的,所以异常值的loss会非常大。
MAE对异常之不敏感,

不妨设拟合函数为常数,那么MSE就相当于所有数据的均值(列出loss对c求导即可),而MAE相当于所有数据的中位数,所以会对异常值不敏感。

优化效率
MAE不可导而且所有的导数的绝对值都相同,优化时无法确定更新速度,
MSE可导,有closed-form解,只需要令偏导数为0即可。

如何选择
如果想要检测异常值则使用MSE,如果想学习一个预测模型则建议使用MAE,或者先进行异常值处理再使用MSE

--smooth L1 loss 

其中:𝑥=f(x)−y 为真实值和预测值的差值

--Huber Loss 也可以称为:Smooth Mean Absolute Error

为什么要使用 Huber Loss

使用MAE训练神经网络的一个大问题是它的持续大梯度,这可能会导致在使用梯度下降训练结束时丢失最小值。对于MSE,当损失接近其最小值时,梯度减小,使其更加精确。

在这种情况下,Huber损失是非常有用的,因为它在减小梯度的最小值附近弯曲。它比MSE对离群值更稳健。因此,它结合了MSE和MAE的优良性能。然而,Huber损失的问题是我们可能需要训练超参数delta,这是一个迭代过程。

--Log-Cosh Loss

Log-Cosh是一个回归损失函数,它比L2更平滑的损失函数。Log-cosh是预测误差使用的数学函数是双曲余弦的对数。公式如下:

L(y,y^p) = \sum ^{n} _{i=1} log (cosh (y_{i}^{p} - y_i) )

优点: 1. 该损失函数log(cosh(x)) 数学意义近似 (x^2)/2;其中,对于非常大的x 数学意义近似于 abs(x) - log(2);这里的数学意义表明:该函数的工作方式与均方差公式有点类似,该损失函数,具有Huber损失函数的所有优点,并且处处可微。

[3] 针对同类样本和不同样本之间差异的loss triplet loss

triplet loss的计算是基于一个三元组<a, p, n>计算同类样本和不同类样本之间的距离差,其中a表示选定的锚点,p表示与a同类别的样本,n表示与a不同类别的样本。

\alpha的作用:

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值