Как использовать resnet, прочитав файл .ckpt моих изученных весов с помощью pytorch

#pytorch #conv-neural-network #load #visualization #resnet

Вопрос:

В pytorch, как я могу написать код, который загружает мой файл .ckpt вместо

 model = torchvision.models.resnet50(pretrained=True)
 

Вот моя попытка ниже

 model = torchvision.models.resnet50(pretrained=False)

PATH = "/content/drive/MyDrive/Colab Notebooks/mlearning2/multi_logs/resnet_2/version_0/checkpoints/epoch=1-step=2543.ckpt"

model.load_state_dict(torch.load(PATH, map_location=torch.device('cpu')))
 

Но это не сработало, и появилась следующая ошибка.

 RuntimeError: Error(s) in loading state_dict for ResNet:
    Missing key(s) in state_dict: "conv1.weight", "bn1.weight", "bn1.bias", "bn1.running_mean", "bn1.running_var", "layer1.0.conv1.weight", "layer1.0.bn1.weight", "layer1.0.bn1.bias", "layer1.0.bn1.running_mean", "layer1.0.bn1.running_var", "layer1.0.conv2.weight", "layer1.0.bn2.weight", "layer1.0.bn2.bias", "layer1.0.bn2.running_mean", "layer1.0.bn2.running_var", "layer1.0.conv3.weight", "layer1.0.bn3.weight", "layer1.0.bn3.bias", "layer1.0.bn3.running_mean", "layer1.0.bn3.running_var", "layer1.0.downsample.0.weight", "layer1.0.downsample.1.weight", "layer1.0.downsample.1.bias", "layer1.0.downsample.1.running_mean", "layer1.0.downsample.1.running_var", "layer1.1.conv1.weight", "layer1.1.bn1.weight", "layer1.1.bn1.bias", "layer1.1.bn1.running_mean", "layer1.1.bn1.running_var", "layer1.1.conv2.weight", "layer1.1.bn2.weight", "layer1.1.bn2.bias", "layer1.1.bn2.running_mean", "layer1.1.bn2.running_var", "layer1.1.conv3.weight", "layer1.1.bn3.weight", "layer1.1.bn3.bias", "layer1.1.bn3.running_mean", "layer1.1.bn3.running_var", "layer1.2.conv1.weight", "layer1.2.bn1.weight", "layer1.2.bn1.bias", "layer1.2.bn1.running_mean", "layer1.2.bn1.running_var", "layer1.2.conv2.weight", "layer1.2.bn2.weight", "layer1.2.bn2.bias", "layer1.2.bn2.running_mean", "layer1.2.bn2.running_var", "layer1.2.conv3.weight", "layer1.2.bn3.weight", "layer1.2.bn3.bias", "layer1.2.bn3.running_mean", "layer1.2.bn3.running_var", "layer2.0.conv1.weight", "layer2.0.bn1.weight", "layer2.0.bn1.bias", "layer2.0.bn1...
    Unexpected key(s) in state_dict: "epoch", "global_step", "pytorch-lightning_version", "state_dict", "callbacks", "optimizer_states", "lr_schedulers", "hparams_name", "hyper_parameters". 
 

Как я могу это сделать?

@Шай, я пытался убежать

 model.load_state_dict(torch.load(PATH, map_location=torch.device('cpu'))['state_dict'])
 

однако получил следующую ошибку.
введите описание изображения здесь

Ответ №1:

Сохраненная контрольная точка содержит не только снимок обученных весов модели, но и некоторую другую полезную информацию о состоянии обучения (например, состояние оптимизатора и т. Д.).

Попробуйте выбрать только соответствующую часть сохраненной контрольной точки:

 model.load_state_dict(torch.load(PATH, map_location=torch.device('cpu'))['state_dict'])
 

Обновить
Основываясь на внесенных вами изменениях и полученной новой ошибке, похоже, что сохраненная модель такова model.backbone = torchvision.models.resnet50() .

Вам нужно создать свой model экземпляр таким же образом, как это делалось во время обучения.

Комментарии:

1. Спасибо, что ответили. Я попробовал, но все равно есть ошибка. Я отредактировал вопрос и поместил там ошибку

2. Спасибо вам за ваш ответ. Мое понимание еще не настолько ясно. Что я могу попытаться сделать дальше?