Adding to moskomule’s suggestion:
You save the weights in the dictionary weights_load in order. However, in Python a regular dictionary does not track the insertion order. When you print the weights_load dict, you will see that it will likely have a different order than VGG weight dict. The error occurs when you want to load an unordered set of weights into the model.
To make sure a dictionary tracks insertion order, use collection.OrderedDict. Simply change
weights_load = {}

with
import collections
weights_load = collections.OrderedDict()

That should maintain the weights order when loading it into model.
Hope it works.
Daniel