class_docstr: Linear normalization layer which scales and shifts the input to [-2.0, 2.0], for bounded states
  with min/max_value (specification key: `linear_normalization`).
  
  Args:
      min_value (float | array[float]): Lower bound of the value
          (<span style="color:#00C000"><b>default</b></span>: based on input_spec).
      max_value (float | array[float]): Upper bound of the value range
          (<span style="color:#00C000"><b>default</b></span>: based on input_spec).
      name (string): Layer name
          (<span style="color:#00C000"><b>default</b></span>: internally chosen).
      input_spec (specification): <span style="color:#00C000"><b>internal use</b></span>.
class_docstr_tok: ["Linear","normalization","layer","which","scales","and","shifts","the","input","to","[","-2.0",",","2.0","]",",","for","bounded","states","with","min\/max_value","(","specification","key",":","`","linear_normalization","`",")",".","Args",":","min_value","(","float","|","array","[","float","]",")",":","Lower","bound","of","the","value","(","<","span","style=","''","color",":","#","00C000","''",">","<","b",">","default","<","\/b",">","<","\/span",">",":","based","on","input_spec",")",".","max_value","(","float","|","array","[","float","]",")",":","Upper","bound","of","the","value","range","(","<","span","style=","''","color",":","#","00C000","''",">","<","b",">","default","<","\/b",">","<","\/span",">",":","based","on","input_spec",")",".","name","(","string",")",":","Layer","name","(","<","span","style=","''","color",":","#","00C000","''",">","<","b",">","default","<","\/b",">","<","\/span",">",":","internally","chosen",")",".","input_spec","(","specification",")",":","<","span","style=","''","color",":","#","00C000","''",">","<","b",">","internal","use","<","\/b",">","<","\/span",">","."]
code: def __init__(
      self,
      *,
      min_value=None,
      max_value=None,
      name=None,
      input_spec=None,
  ):
      if min_value is None:
          if input_spec.min_value is None:
              raise TensorforceError.required(
                  name="LinearNormalization", argument="min_value"
              )
          min_value = input_spec.min_value
  
      if max_value is None:
          if input_spec.max_value is None:
              raise TensorforceError.required(
                  name="LinearNormalization", argument="max_value"
              )
          max_value = input_spec.max_value
  
      self.min_value = np.asarray(min_value)
      self.max_value = np.asarray(max_value)
  
      if (self.min_value >= self.max_value).any():
          raise TensorforceError(
              name="LinearNormalization",
              argument="min/max_value",
              value=(self.min_value, self.max_value),
              hint="not less than",
          )
  
      super().__init__(name=name, input_spec=input_spec)
  
      self.architecture_kwargs["min_value"] = str(min_value)
      self.architecture_kwargs["max_value"] = str(max_value)
  
imports: import numpy
  import tensorflow
  from tensorforce import TensorforceError
  from tensorforce.core import parameter_modules, TensorSpec, tf_function, tf_util
  from tensorforce.core.layers import Layer, StatefulLayer
label_desc: Use image node_id 1 to create a new LinearNormalization object from inherited base classes: Layer with example: obj = LinearNormalization()