torch使用心得
基本概念
训练周期
训练周期(epoch)下有多个训练步骤(step)。
训练集/验证集/测试集
训练集(Training Set): 使用于模型训练的数据。模型通过学习训练集中的特征和模式来更新其参数。
验证集(Validation Set): 用于调整模型超参数和评估模型性能的数据。通常在每个训练周期(epoch)结束后使用验证集来检查模型的表现,帮助我们防止过拟合。
测试集(Test Set): 用于评估模型最终性能的数据。测试集是完全独立于训练过程的,只有在模型训练完成后才能用于评估。
ModelCheckpoint
ModelCheckpoint是Pytorch中的一个Callback,它就是用于模型缓存的。
它会监视某个指标,每次指标达到最好的时候,它就缓存当前模型。
在每个epoch结束作为回调函数,保存模型。
torch张量
创建torch张量
# 从numpy array创建
tensor = torch.from_numpy(numpy.array([[-1.5029, 2.2071]]))
# 直接从list创建,优先用这种
torch.tensor([2, 3.3])
访问下标
t = torch.tensor([1,2])
# t[0]依然是张量,要取得数字,用item方法
print(t[0].item())
argmax
返回数组沿轴axis最大值的索引。
import numpy
# axis=1表示按行,axis=0表示按列
# 结果[1, 0]
print(numpy.argmax([[2,3,1], [4,2,1]], axis=1))
# 如果无axis参数,表示整个数组平铺(flatten)后的索引位置
# 结果为3
print(numpy.argmax([[2,3,1], [4,2,1]]))
argmax一般用于分类结果的输出。分类结果的数组包含了每个类别的概率值,其索引则对应各自的label,取最大概率值的索引,就相当于得到了最有可能的类别。
torch.argmax的用法跟numpy.argmax很类似,就是参数略有不同,torch.argmax维度参数是dim。
training_step
在自动优化中,training_step必须返回一个tensor或者dict或者None(跳过),对于简单的使用,在training_step可以return一个tensor作为Loss回传,也可以return一个字典,其中必须包括key “loss”,字典中的"loss"会提取出来作为Loss回传,具体过程主要包含在lightning\pytorch\loop\sautomatic.py中的_ AutomaticOptimization()类。
multi-class和multi-label
multi-class:多分类任务,即每个样本只属于一个类别。例如,将图像分类为人或汽车等
multi-label:多标签分类任务,即每个样本可以属于多个类别。例如,一张图像可以同时包含猫和狗,因此可以同时被标记为“猫”和“狗”
torch/sklearn度量指标
参考:
链接
所谓的macro和micro,以F1举例来说,前者是每个类别F1的平均值,后者则是micro Precision与micro Recall的综合评价。
torch lightning
torch的封装,简化开发工作。
使用参考:
链接