如何在 PyTorch 中使用 Inception 模型进行迁移学习?
How to use the Inception model for transfer learning in PyTorch?
我创建了一个用于迁移学习的 PyTorch torchvision
模型,使用预构建的 ResNet50 基础模型,如下所示:
# Create base model from torchvision.models
model = resnet50(pretrained=True)
num_features = model.fc.in_features
# Define the network head and attach it to the model
model_head = nn.Sequential(
nn.Linear(num_features, 512),
nn.ReLU(),
nn.Dropout(0.25),
nn.Linear(512, 256),
nn.ReLU(),
nn.Dropout(0.5),
nn.Linear(256, num_classes),
)
model.fc = model_head
现在我想使用 Ineception v3 模型作为基础,所以我从上面的 resnet50()
切换到 inception_v3()
,其余保持原样.但是,在训练期间我收到以下错误:
TypeError: cross_entropy_loss(): argument 'input' (position 1) must be Tensor, not InceptionOutputs
那么如何使用 torchvision.models
中的 Inception v3 模型作为迁移学习的基础模型?
来自关于 Inceptionv3 架构的 PyTorch 文档:
这个网络是独一无二的,因为它在训练时有两个输出层。主要输出是网络末端的线性层。第二个输出称为辅助输出,包含在网络的 AuxLogits 部分。
看看这个教程:https://pytorch.org/tutorials/beginner/finetuning_torchvision_models_tutorial.html#inception-v3在那里你可以找到如何对几个模型使用迁移学习,包括 ResNet 和 Inception。
我创建了一个用于迁移学习的 PyTorch torchvision
模型,使用预构建的 ResNet50 基础模型,如下所示:
# Create base model from torchvision.models
model = resnet50(pretrained=True)
num_features = model.fc.in_features
# Define the network head and attach it to the model
model_head = nn.Sequential(
nn.Linear(num_features, 512),
nn.ReLU(),
nn.Dropout(0.25),
nn.Linear(512, 256),
nn.ReLU(),
nn.Dropout(0.5),
nn.Linear(256, num_classes),
)
model.fc = model_head
现在我想使用 Ineception v3 模型作为基础,所以我从上面的 resnet50()
切换到 inception_v3()
,其余保持原样.但是,在训练期间我收到以下错误:
TypeError: cross_entropy_loss(): argument 'input' (position 1) must be Tensor, not InceptionOutputs
那么如何使用 torchvision.models
中的 Inception v3 模型作为迁移学习的基础模型?
来自关于 Inceptionv3 架构的 PyTorch 文档:
这个网络是独一无二的,因为它在训练时有两个输出层。主要输出是网络末端的线性层。第二个输出称为辅助输出,包含在网络的 AuxLogits 部分。
看看这个教程:https://pytorch.org/tutorials/beginner/finetuning_torchvision_models_tutorial.html#inception-v3在那里你可以找到如何对几个模型使用迁移学习,包括 ResNet 和 Inception。