我可以使用完全不同的架构来训练我的预训练模型吗?
Can I train my pretrained model with a totally different architecture?
我已经在 Pytorch 上使用我的自定义数据集训练了预训练的 ResNet18 模型,想知道我是否可以传输我的模型文件来训练另一个模型一个具有不同架构的,例如ResNet50。我知道我必须相应地保存我的模型 (在 此处有很好的解释) 但这是一个我以前从未想过的问题。
我打算使用更高级的模型,例如 VisionTransformers (ViT),但我不知道是否必须从预训练的 ViT 开始或者我可以只使用我以前的模型文件并将其用作预训练模型来训练 ViT。
示例场景:ResNet18 --> ResNet50 --> Inception v3 --> ViT
我最好的猜测是,由于权重、神经元和层结构的数量,这是不可能的,但如果我错过了这里的关键点,我很乐意听到。
谢谢!
在仅层数不同的模型(Resnet-18 和 Resnet-50)之间,已经完成从较小模型层的权重初始化较大模型的某些层。相反,您可以通过采用规则间隔层的子集并初始化较小的模型来截断较大的模型。在这两种情况下,如果您希望达到 semi-decent 的表现,您需要在最后重新训练所有内容。
使用截然不同的架构(视觉转换器与 CNN)的全部意义在于从输入中学习不同的特征并开启新的语义理解水平。 BeiT 等最新模型也使用新的 self-supervised 训练方案,这些方案与经典的 ImageNet 预训练无关。使用来自另一个模型的经过训练的权重会违背这一点。
话虽如此,如果您想使用 ViT,为什么不从 HuggingFace 和 fine-tune 上可用的预训练权重开始呢?
我已经在 Pytorch 上使用我的自定义数据集训练了预训练的 ResNet18 模型,想知道我是否可以传输我的模型文件来训练另一个模型一个具有不同架构的,例如ResNet50。我知道我必须相应地保存我的模型 (在
我打算使用更高级的模型,例如 VisionTransformers (ViT),但我不知道是否必须从预训练的 ViT 开始或者我可以只使用我以前的模型文件并将其用作预训练模型来训练 ViT。
示例场景:ResNet18 --> ResNet50 --> Inception v3 --> ViT
我最好的猜测是,由于权重、神经元和层结构的数量,这是不可能的,但如果我错过了这里的关键点,我很乐意听到。
谢谢!
在仅层数不同的模型(Resnet-18 和 Resnet-50)之间,已经完成从较小模型层的权重初始化较大模型的某些层。相反,您可以通过采用规则间隔层的子集并初始化较小的模型来截断较大的模型。在这两种情况下,如果您希望达到 semi-decent 的表现,您需要在最后重新训练所有内容。
使用截然不同的架构(视觉转换器与 CNN)的全部意义在于从输入中学习不同的特征并开启新的语义理解水平。 BeiT 等最新模型也使用新的 self-supervised 训练方案,这些方案与经典的 ImageNet 预训练无关。使用来自另一个模型的经过训练的权重会违背这一点。
话虽如此,如果您想使用 ViT,为什么不从 HuggingFace 和 fine-tune 上可用的预训练权重开始呢?