深入浅出PytorchTask04打卡

首先先引入必要的包:
image

在设置完环境之后,就可以开始定义dataset

但是由于没有找到数据集的地址,所以暂时不能够显示出来图片。
image

1. 自定义损失函数

先对数据集进行简单的训练。
image

然后是修改损失函数,损失函数仅仅是一个函数而已,因此我们可以直接用函数的方式定义一个自己的函数:
image
也可以用类的方式去定义:
image
用类的方式去定义,在加一些东西的时候,会比较方便

  1. 然后是如何去动态的调整学习率。因为随着训练的进行,固定的学习率可能是满足不了需求的。
    PyTorch是有自带的可以动态调整学习率的工具:StepLR scheduler:

    Step_size的意思是,每多少轮调整一次学习率,本代码是每1轮调整一次;gamma的意思是将学习率调整为原来的多少,本代码的意思是每过完一轮,学习率调整为原来的0.8。

当然可以用定义函数的方式,去定义一个自己想要实现的调整学习率的函数:
image
比如每30轮学习率就降低为原来的1/10这种。

  1. 模型微调
    比如在图像分类时,修改入参或者出参层的时候,可以用到模型的微调。模型微调的精髓在于先固定一些层不要去调整,再去选择一些层去做一些微小的调整
    image
    用这种方式去定义不需要改变的层(此代码就是代表outc层中conv卷积中的weight和bias在训练时是不更新的。)

  2. 最后是如何进行半精度训练
    在训练时,有的时候GPU\CPU跑不动,这时候就可以用半精度训练去解决这样的问题。
    即在计算时让计算的小数点往前缩一些,不需要计算这么多位的小数。
    先引入必要的库:
    image
    然后在模型定义的时,在forward之前,加一个autocast修饰器
    image

在训练过程中,要将数据输入模型及其之后的部分放入“with autocast():“的段落中即可:


这样在训练时也就只计算了16位小数

浙ICP备19012682号