          :class:`numpy.ndarray`
              The predictions from the model
          """
          assert self._model is not None
          if self._backend == "amd" and batch_size is not None:
              return self._amd_predict_with_optimized_batchsizes(feed, batch_size)
          return self._model.predict(feed, verbose=0, batch_size=batch_size)
  
      def _amd_predict_with_optimized_batchsizes(
              self,
              feed: Union[List[np.ndarray], np.ndarray],
              batch_size: int) -> Union[List[np.ndarray], np.ndarray]:
 
</s> remove         self._model.load_weights(self._model_path)
        if self._backend != "amd":
            self._model.make_predict_function()
 </s> add         with self._context:
            self._model.load_weights(self._model_path)
            if self._backend != "amd":
                self._model.make_predict_function() </s> remove         self._model = Model(*function())
 </s> add         with self._context:
            self._model = Model(*function()) </s> remove         softmax = Activation("softmax", name="softmax")(self._model.layers[layer_index].output)
        self._model = Model(inputs=self._model.input, outputs=[softmax])
 </s> add         with self._context:
            softmax = Activation("softmax", name="softmax")(self._model.layers[layer_index].output)
            self._model = Model(inputs=self._model.input, outputs=[softmax]) </s> remove         self._model = k_load_model(self._model_path, compile=False, **self._model_kwargs)
        if self._backend != "amd":
            self._model.make_predict_function()
 </s> add         with self._context:
            self._model = k_load_model(self._model_path, compile=False, **self._model_kwargs)
            if self._backend != "amd":
                self._model.make_predict_function()
        with self._context:
            if self._backend == "amd" and batch_size is not None:
                return self._amd_predict_with_optimized_batchsizes(feed, batch_size)
            return self._model.predict(feed, verbose=0, batch_size=batch_size)
          :class:`numpy.ndarray`
              The predictions from the model
          """
          assert self._model is not None
        with self._context:
            if self._backend == "amd" and batch_size is not None:
                return self._amd_predict_with_optimized_batchsizes(feed, batch_size)
            return self._model.predict(feed, verbose=0, batch_size=batch_size)
        with self._context:
            if self._backend == "amd" and batch_size is not None:
                return self._amd_predict_with_optimized_batchsizes(feed, batch_size)
            return self._model.predict(feed, verbose=0, batch_size=batch_size)
        with self._context:
            if self._backend == "amd" and batch_size is not None:
                return self._amd_predict_with_optimized_batchsizes(feed, batch_size)
            return self._model.predict(feed, verbose=0, batch_size=batch_size)
  
      def _amd_predict_with_optimized_batchsizes(
              self,
              feed: Union[List[np.ndarray], np.ndarray],
              batch_size: int) -> Union[List[np.ndarray], np.ndarray]:
keep keep keep keep replace replace replace keep keep keep keep keep
 Add CPU option to BiSeNet and MTCNN
  - Add CPU option to KSession
  - MTCNN optimizations
  - Update docs for bisenet + mtcnn 
lib/model/session.py