class_docstr: MKL Backend
class_docstr_tok: ["MKL","Backend"]
code: def fprop_relu(self, layer, x, slope):
      if layer is None:
          layer = layer_mkl.ReluLayerMKL()
      if not hasattr(x, "shape5D"):
          return self.maximum(x, 0) + slope * self.minimum(0, x)
      if slope != 0:
          self.convert(x)
          x.clean_mkl()
          return self.maximum(x, 0) + slope * self.minimum(0, x)
  
      if x.shape5D is not None:
          C, D, H, W, N = x.shape5D
      else:
          C, N = x._tensor.shape
          D, H, W = 1, 1, 1
          x.shape5D = C, D, H, W, N
      layer.shape5D = C, D, H, W, N
  
      primitives = c_longlong(layer.dnnPrimitives.ctypes.data)
      if x.primitive[3] == 0:
          layer.inputMKL = False
      self.mklEngine.Relu_f(
          x.get_prim(), primitives, layer.initOk_f, N, C, H, W
      )
      layer.initOk_f = 1
      return x
  
imports: from __future__ import division
  from builtins import zip
  import logging
  from neon.backends import layer_mkl
  from neon.backends.util.check_mkl import get_mkl_lib
  from neon.backends.nervanacpu import CPUTensor, NervanaCPU, CustomNumpy
  import ctypes
  from cffi import FFI
  from ctypes import c_longlong, c_float, c_double, c_int
  import numpy
  from neon.backends import math_cpu
  from neon.backends.backend import OpTreeNode
  import os
  import sys
label_desc: Use image node_id 17 for calling the NervanaMKL obj's underlying member method code with example usage: obj.fprop_relu(layer, x, slope) and returns: x, unknown, unknown