赞
踩
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
其中:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。