Ho sorry I got confused because you were mentioning your normalize function. But it is not relevant here since you create your leaf after it?
One thing you can do to be sure is data_batch_.register_hook(print). This will print the gradient of data_batch_ when it is computed.
If it prints, that means that the gradients are properly computed and they just happen to be 0. most likely because you have non-differentiable ops later in your network.
If it does not print, then it means that your break the graph somewhere below inside your network.