              results themselves, as the function needs to be executed within the correct context.
          """
          self._model = Model(*function())
  
      def load_model_weights(self):
          """ Load model weights for a defined model inside the correct session.
  
          This method is a wrapper for :class:`keras.load_weights()`. Once a model has been defined
          in :func:`define_model()` this method can be called to load its weights from the
          :attr:`model_path` defined during initialization of this class.
 
</s> remove     def load_model(self):
 </s> add     def load_model(self) -> None: </s> remove     def append_softmax_activation(self, layer_index=-1):
 </s> add     def append_softmax_activation(self, layer_index: int = -1) -> None: </s> remove     def define_model(self, function):
 </s> add     def define_model(self, function: Callable) -> None: </s> remove     def predict(self, feed, batch_size=None):
 </s> add     def predict(self,
                feed: Union[List[np.ndarray], np.ndarray],
                batch_size: Optional[int] = None) -> Union[List[np.ndarray], np.ndarray]:
    def load_model_weights(self) -> None:
              results themselves, as the function needs to be executed within the correct context.
          """
          self._model = Model(*function())
  
    def load_model_weights(self) -> None:
          """ Load model weights for a defined model inside the correct session.
  
          This method is a wrapper for :class:`keras.load_weights()`. Once a model has been defined
          in :func:`define_model()` this method can be called to load its weights from the
          :attr:`model_path` defined during initialization of this class.
keep keep keep keep replace keep keep keep keep keep
 Update TF to 2.9
    - Update TF to 2.7 to 2.9
    - Bump dependencies
    - Remove decode from pynvml calls
    - force keras predict functions to non-verbose
    - update tests
    - update Tensorboard logging
    - Update docs 
lib/model/session.py