举个例子,以下两行有什么区别

from torchvision.models import VGG16_Weights
# 不加载预训练权重
vgg16_false = torchvision.models.vgg16(weights=None)

# 加载预训练权重
vgg16_true = torchvision.models.vgg16(weights=VGG16_Weights.IMAGENET1K_V1)
  1. weights=None(不加载预训练权重):

    • 创建 VGG16 模型时,网络的参数是随机初始化的。
    • 模型需要在你的数据集上从头训练,适合在全新的领域或任务中从零开始训练模型(如一个完全不同的任务或数据分布)。
    • 通常用于有大量数据和计算资源的场景。
  2. weights=VGG16_Weights.IMAGENET1K_V1(加载预训练权重):

    • 创建 VGG16 模型时,网络参数加载了已经在 ImageNet 数据集上训练好优化的权重。
    • 适用于与 ImageNet 数据分布相似的任务,可以直接用这些预训练特征进行迁移学习,微调模型,或者甚至完全直接推理。
    • 能节省训练时间,提高模型在新任务上的效果。

总结:

  • 加载预训练权重VGG16_Weights.IMAGENET1K_V1)是为了利用 ImageNet 数据事先训练好的特征来加速模型训练,或者直接用于推理。
  • 不加载预训练权重weights=None)需要完全自行训练模型,适合在全新任务上使用。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐