Repository: pykeen/pykeen
Issue: Load trained model error
Root cause: External Dependency Breakage

### Describe the bug

When I tried to load a well trained RotatE model for link predict, this error appear.

### How to reproduce

```python
import pandas as pd
from pykeen.triples import TriplesFactory
from pykeen.pipeline import pipeline
import torch
from matplotlib import pyplot as plt
from pykeen.models import predict
from pykeen.models.predict import get_tail_prediction_df
from tqdm import tqdm

path='./graph_dataset/dblp_1980/'
file_name="RotatE_yago"
tf = TriplesFactory.from_path(path+"dblp_e.tsv")
training, testing, validation = tf.split([.8, .1, .1],random_state=1234)

device = torch.device('cuda:1')
model=torch.load("./result/"+file_name+"/trained_model.pkl")
```

### Environment

| Key             | Value                    |
|-----------------|--------------------------|
| OS              | posix                    |
| Platform        | Linux                    |
| Release         | 4.15.0-163-generic       |
| Time            | Tue Apr 19 07:26:36 2022 |
| Python          | 3.9.12                   |
| PyKEEN          | 1.8.0                    |
| PyKEEN Hash     | UNHASHED                 |
| PyKEEN Branch   |                          |
| PyTorch         | 1.11.0+cu113             |
| CUDA Available? | true                     |
| CUDA Version    | 11.3                     |
| cuDNN Version   | 8200                     |

### Additional information

Is the problem that I tried to use pykeen 1.8.0 version to load a 1.7.0 model? I recently update pykeen, but when I change the version to 1.7.0, same problem appear.
The error is as follow.
```python-traceback
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
/home/fxy/pykeen/predict_model.ipynb Cell 2' in <cell line: 2>()
      [1](vscode-notebook-cell://ssh-remote%2Btjubd9/home/fxy/pykeen/predict_model.ipynb#ch0000001vscode-remote?line=0)[ device = torch.device('cuda:1')
----> ]()[2](vscode-notebook-cell://ssh-remote%2Btjubd9/home/fxy/pykeen/predict_model.ipynb#ch0000001vscode-remote?line=1)[ model=torch.load("./result/"+file_name+"/trained_model.pkl")

File ~/miniconda3/envs/pykeen2/lib/python3.9/site-packages/torch/serialization.py:712, in load(f, map_location, pickle_module, **pickle_load_args)
    ]()[710](file:///home/fxy/miniconda3/envs/pykeen2/lib/python3.9/site-packages/torch/serialization.py?line=709)[             opened_file.seek(orig_position)
    ]()[711](file:///home/fxy/miniconda3/envs/pykeen2/lib/python3.9/site-packages/torch/serialization.py?line=710)[             return torch.jit.load(opened_file)
--> ]()[712](file:///home/fxy/miniconda3/envs/pykeen2/lib/python3.9/site-packages/torch/serialization.py?line=711)[         return _load(opened_zipfile, map_location, pickle_module, **pickle_load_args)
    ]()[713](file:///home/fxy/miniconda3/envs/pykeen2/lib/python3.9/site-packages/torch/serialization.py?line=712)[ return _legacy_load(opened_file, map_location, pickle_module, **pickle_load_args)

File ~/miniconda3/envs/pykeen2/lib/python3.9/site-packages/torch/serialization.py:1046, in _load(zip_file, map_location, pickle_module, pickle_file, **pickle_load_args)
   ]()[1044](file:///home/fxy/miniconda3/envs/pykeen2/lib/python3.9/site-packages/torch/serialization.py?line=1043)[ unpickler = UnpicklerWrapper(data_file, **pickle_load_args)]()
1045[ ]()unpickler.persistent_load = persistent_load
-> [1046](file:///home/fxy/miniconda3/envs/pykeen2/lib/python3.9/site-packages/torch/serialization.py?line=1045)[ result = unpickler.load()
   ]()[1048](file:///home/fxy/miniconda3/envs/pykeen2/lib/python3.9/site-packages/torch/serialization.py?line=1047)[ torch._utils._validate_loaded_sparse_tensors()
   ]()[1050](file:///home/fxy/miniconda3/envs/pykeen2/lib/python3.9/site-packages/torch/serialization.py?line=1049)[ return result

File ~/miniconda3/envs/pykeen2/lib/python3.9/site-packages/torch/serialization.py:1039, in _load.<locals>.UnpicklerWrapper.find_class(self, mod_name, name)
   ]()[1037](file:///home/fxy/miniconda3/envs/pykeen2/lib/python3.9/site-packages/torch/serialization.py?line=1036)[         pass
   ]()[1038](file:///home/fxy/miniconda3/envs/pykeen2/lib/python3.9/site-packages/torch/serialization.py?line=1037)[ mod_name = load_module_mapping.get(mod_name, mod_name)
-> ]()[1039](file:///home/fxy/miniconda3/envs/pykeen2/lib/python3.9/site-packages/torch/serialization.py?line=1038) return super().find_class(mod_name, name)
File ~/miniconda3/envs/pykeen2/lib/python3.9/site-packages/pykeen/nn/emb.py:39, in <module>
     [37](file:///home/fxy/miniconda3/envs/pykeen2/lib/python3.9/site-packages/pykeen/nn/emb.py?line=36)[ from ..triples import CoreTriplesFactory, TriplesFactory
     ]()[38](file:///home/fxy/miniconda3/envs/pykeen2/lib/python3.9/site-packages/pykeen/nn/emb.py?line=37)[ from ..typing import Constrainer, Hint, HintType, Initializer, Normalizer
---> ]()[39](file:///home/fxy/miniconda3/envs/pykeen2/lib/python3.9/site-packages/pykeen/nn/emb.py?line=38)[ from ..utils import Bias, activation_resolver, clamp_norm, complex_normalize, convert_to_canonical_shape
     ]()[41](file:///home/fxy/miniconda3/envs/pykeen2/lib/python3.9/site-packages/pykeen/nn/emb.py?line=40)[ __all__ = [
     ]()[42](file:///home/fxy/miniconda3/envs/pykeen2/lib/python3.9/site-packages/pykeen/nn/emb.py?line=41)[     "RepresentationModule",
     ]()[43](file:///home/fxy/miniconda3/envs/pykeen2/lib/python3.9/site-packages/pykeen/nn/emb.py?line=42)[     "Embedding",
   (...)
     ]()[55](file:///home/fxy/miniconda3/envs/pykeen2/lib/python3.9/site-packages/pykeen/nn/emb.py?line=54)[     "normalizers",
     ]()[56](file:///home/fxy/miniconda3/envs/pykeen2/lib/python3.9/site-packages/pykeen/nn/emb.py?line=55)[ ]
     ]()[58](file:///home/fxy/miniconda3/envs/pykeen2/lib/python3.9/site-packages/pykeen/nn/emb.py?line=57)[ logger = logging.getLogger(__name__)

ImportError: cannot import name 'activation_resolver' from 'pykeen.utils' (/home/fxy/miniconda3/envs/pykeen2/lib/python3.9/site-packages/pykeen/utils.py)]()
```

Hi @lovefxyo ,

directly loading the model is only guaranteed to work in same version. If you switch version, there *may* be conflicts. You can fix that, by saving the weights only using [pykeen.models.Model.save_state](https://pykeen.readthedocs.io/en/stable/api/pykeen.models.Model.html#pykeen.models.Model.save_state) from the old version of PyKEEN, and loading the weights again in the new version using [pykeen.models.Model.load_state](https://pykeen.readthedocs.io/en/stable/api/pykeen.models.Model.html#pykeen.models.Model.load_state). If the gap between the two versions is large, it *may* also be necessary to manually modify the loaded state dict before loading the weights into the model. This should only happen if the structure of the model classes changed, or variables where renamed.

Thank you for your patient answer, I will try your method.