#pytorch #state-dict
#pytorch #state-dict
Вопрос:
Я пытаюсь загрузить предварительно подготовленную модель resnet56 с небольшой разницей. Модель предварительного обучения-это обычная модель сети при построении, в то время как модель, которую я собираюсь прочитать, разбивает весь этап на две части, где первая часть является последовательной, а остальные помещаются в список, и я назвал их так, как это делает обычная сеть: построить сеть
self.layer2 = self._make_layer(block, 32, blocks=n_size, stride=2, extract_feature=extract_feature, feature_layer=self.feature_layer_2)for index, item in enumerate(self.feature_layer_2): name_num = self.n_size - extract_feature index setattr(self, f'layer2.{name_num}', item)self.layer3 = self._make_layer(block, 64, blocks=n_size, stride=2, extract_feature=extract_feature, feature_layer=self.feature_layer_3)for index, item in enumerate(self.feature_layer_3): name_num = self.n_size - extract_feature index setattr(self, f'layer3.{name_num}', item)
и теперь я получил эту неожиданную ключевую ошибку:сообщение об ошибке
Ошибка времени выполнения: Ошибка(ы) при загрузке state_dict для ResNetc: Неожиданный ключ(ы) в state_dict: «layer2.5.conv1.вес», «слой2.5.bn1.вес», «слой2.5.bn1.предвзятость», «слой2.5.bn1.running_mean», «слой2.5.bn1.running_var», «слой2.5.bn1.num_batches_tracked», «слой2.5.conv2.вес», «слой2.5.bn2.вес», «слой2.5.bn2.предвзятость», «слой2.5.bn2.running_mean», «слой2.5.bn2.running_var», «слой2.5.bn2.num_batches_tracked», «слой2.6.conv1.вес», «слой2.6.bn1.вес», «слой2.6.bn1.предвзятость», «слой2.6.bn1.running_mean», «слой2.6.bn1.running_var», «слой2.6.bn1.num_batches_tracked», «слой2.6.conv2.вес», «слой2.6.bn2.вес», «слой2.6.bn2.предвзятость», «слой2.6.bn2.running_mean», «слой2.6.bn2.running_var», «слой2.6.bn2.num_batches_tracked», «слой2.7.conv1.вес», «слой2.7.bn1.вес», «слой2.7.bn1.предвзятость», «слой2.7.bn1.running_mean», «слой2.7.bn1.running_var», «слой2.7.bn1.num_batches_tracked», «слой2.7.conv2.вес», «слой2.7.bn2.вес», «слой2.7.bn2.предвзятость», «слой2.7.bn2.running_mean», «слой2.7.bn2.running_var», «слой2.7.bn2.num_batches_tracked», «слой2.8.conv1.вес», «слой2.8.bn1.вес», «слой2.8.bn1.предвзятость», «слой2.8.bn1.running_mean», «слой2.8.bn1.running_var», «слой2.8.bn1.num_batches_tracked», «слой2.8.conv2.вес», «слой2.8.bn2.вес», «слой2.8.bn2.предвзятость», «слой2.8.bn2.running_mean», «слой2.8.bn2.running_var», «слой2.8.bn2.num_batches_tracked», «Уровень 3.5.conv1.вес», «Уровень 3.5.bn1.вес», «Уровень 3.5.bn1.предвзятость», «Уровень 3.5.bn1.running_mean», «Уровень 3.5.bn1.running_var», «Уровень 3.5.bn1.num_batches_tracked», «Уровень 3.5.conv2.вес», «Уровень 3.5.bn2.вес», «Уровень 3.5.bn2.предвзятость», «Уровень 3.5.bn2.running_mean», «Уровень 3.5.bn2.running_var», «Уровень 3.5.bn2.num_batches_tracked», «Уровень 3.6.conv1.вес», «Уровень 3.6.bn1.вес», «Уровень 3.6.bn1.предвзятость», «Уровень 3.6.bn1.running_mean», «Уровень 3.6.bn1.running_var», «Уровень 3.6.bn1.num_batches_tracked», «Уровень 3.6.conv2.вес», «Уровень 3.6.bn2.вес», «Уровень 3.6.bn2.предвзятость», «Уровень 3.6.bn2.running_mean», «Уровень 3.6.bn2.running_var», «Уровень 3.6.bn2.num_batches_tracked», «Уровень 3.7.conv1.вес», «Уровень 3.7.bn1.вес», «Уровень 3.7.bn1.предвзятость», «Уровень 3.7.bn1.running_mean», «Уровень 3.7.bn1.running_var», «Уровень 3.7.bn1.num_batches_tracked», «Уровень 3.7.conv2.вес», «Уровень 3.7.bn2.вес», «Уровень 3.7.bn2.предвзятость», «Уровень 3.7.bn2.running_mean», «Уровень 3.7.bn2.running_var», «Уровень 3.7.bn2.num_batches_tracked», «Уровень 3.8.conv1.вес», «Уровень 3.8.bn1.вес», «Уровень 3.8.bn1.смещение», «layer3.8.bn1.running_mean», «layer3.8.bn1.running_var», «layer3.8.bn1.num_batches_tracked», «layer3.8.conv2.вес», «layer3.8.bn2.вес», «layer3.8.bn2.смещение», «layer3.8.bn2.running_mean», «layer3.8.bn2.running_var», «слой 3.8.bn2.num_batches_ отслежен».
Я также попытался убедиться, что ключи обоих state_dict одинаковы, используя следующий код:
print('print keys from state_dict while not in model---------------------------------------')for item in state.keys(): if item not in model.state_dict().keys(): print(item)print(f'Length of keys in state_dict: {len(state.keys())}')print(f'Length of keys in model: {len(model.state_dict().keys())}')
Then I got the results:
print keys from state_dict while not in model—————————————
Length of keys in state_dict: 344
Length of keys in model: 344
Комментарии:
1.New findings, this error still occurs when recovering from checkpoints when directly training my own models with random initialize… that is the model cannot even read from its own checkpoint