当前位置:   article > 正文

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

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

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 

其中:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/596056
推荐阅读
相关标签