code: def psnr(prediction, ground_truth, maxp=None, name="psnr"):
      """`Peak Signal to Noise Ratio <https://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio>`_.
  
      .. math::
  
          PSNR = 20 \cdot \log_{10}(MAX_p) - 10 \cdot \log_{10}(MSE)
  
      Args:
          prediction: a :class:`tf.Tensor` representing the prediction signal.
          ground_truth: another :class:`tf.Tensor` with the same shape.
          maxp: maximum possible pixel value of the image (255 in in 8bit images)
  
      Returns:
          A scalar tensor representing the PSNR
      """
  
      maxp = float(maxp)
  
      def log10(x):
          with tf.name_scope("log10"):
              numerator = tf.log(x)
              denominator = tf.log(
                  tf.constant(10, dtype=numerator.dtype)
              )
              return numerator / denominator
  
      mse = tf.reduce_mean(tf.square(prediction - ground_truth))
      if maxp is None:
          psnr = tf.multiply(log10(mse), -10.0, name=name)
      else:
          psnr = tf.multiply(log10(mse), -10.0)
          psnr = tf.add(tf.multiply(20.0, log10(maxp)), psnr, name=name)
  
      return psnr
  
imports: import tensorflow
  from ..compat import tfv1
label_desc: Use image node_id 3 for calling a global function with example usage: psnr(prediction, ground_truth, maxp, name) and returns: psnr, unknown