I have trained a feature extractor in Keras and saved the weights as a h5 file. Now I want to load the same weights into the same model created and initialized in PyTorch for performance comparisons. Is there any way I can convert the h5 file to pth file so I can load that into the PyTorch model?
You must be careful with the versions from TF and PyTorch (as some commands may be different).
Basically you must:
1 - Know your layer and activation structure on Keras:
You can get the layer information with:
If you can't get info about activation functions, try:
for layer in model_keras.layers: print(layer.output)
2 - Build a model on PyTorch that has the same layer structure (and activation) as on Keras
3 - The recently created PyTorch model (let's say
model_pyt) has different weights and biases from your model on Keras, so you must copy those weights and biases from the Keras model to PyTorch model:
BE CAREFUL HERE, PYTORCH WEIGHTS ARE TRANSPOSED IN RELATION TO KERAS WEIGHTS
Then, for example, copying a weight would be like:
model_pyt.layer1.weight.data = torch.tensor(model_keras.layers.get_weights().T)
And for the bias:
model_pyt.layer1.bias.data = torch.tensor(model_keras.layers.get_weights())
repeat that for all layers.
Then, your PyTorch model has the same architecture and weights as the Keras model and might behave in the same way.