MINE (Mutual Information Neural Estimator), from the paper: https://arxiv.org/abs/1801.04062, implemented with Tensorflow 2.
Note: this implementation and choice of parameters works only well for low dimensional random variables. Higher dimensional variables need additional fine-tuning on a case by case basis.