2024-10-02 12:26:55 发布
网友
我想在图像传输网络上训练一个分类器。在
如何用我自己的自定义分类器替换torchvision.modelsImageNet分类器的最后一层?在
torchvision.models
获取一个预先训练过的ImageNet模型(resnet152具有最佳精度):
resnet152
from torchvision import models # https://pytorch.org/docs/stable/torchvision/models.html model = models.resnet152(pretrained=True)
打印出它的结构,以便与最终状态进行比较:
从模型中移除最后一个模块(通常是一个完全连接的层):
classifier_name, old_classifier = model._modules.popitem()
冻结模型的特征检测器部分的参数,使其不受反向传播的调整:
for param in model.parameters(): param.requires_grad = False
创建新分类器:
classifier_input_size = old_classifier.in_features classifier = nn.Sequential(OrderedDict([ ('fc1', nn.Linear(classifier_input_size, hidden_layer_size)), ('activation', nn.SELU()), ('dropout', nn.Dropout(p=0.5)), ('fc2', nn.Linear(hidden_layer_size, output_layer_size)), ('output', nn.LogSoftmax(dim=1)) ]))
我们的分类器的模块名需要与被删除的模块名相同。将我们的新分类器添加到特征检测器的末尾:
model.add_module(classifier_name, classifier)
最后,打印出新网络的结构:
获取一个预先训练过的ImageNet模型(
resnet152
具有最佳精度):打印出它的结构,以便与最终状态进行比较:
^{pr2}$从模型中移除最后一个模块(通常是一个完全连接的层):
冻结模型的特征检测器部分的参数,使其不受反向传播的调整:
创建新分类器:
我们的分类器的模块名需要与被删除的模块名相同。将我们的新分类器添加到特征检测器的末尾:
最后,打印出新网络的结构:
^{pr2}$相关问题 更多 >
编程相关推荐