Keras can’t load weights for layers that don’t exist yet.
You need to reconstruct your model exactly as it was (i.e. removing top VGG layer and adding your dense layers) before loading weights.
It will also help if you assign names to your layers with trained weights (otherwise Keras assigns them automatically, which may make it more difficult to get names to line up).
You can also try creating a full custom layer for your preprocessing function, which would let you save the full model (you will need to add some parameters to the layer and will need to import its code before loading the model).