code: def learn(self, grad_arr, fix_opt_flag=False):
          '''
          Update this Discriminator by ascending its stochastic gradient.
  
          Args:
              grad_arr:       `np.ndarray` of gradients.
              fix_opt_flag:   If `False`, no optimization in this model will be done.
          
          Returns:
              `np.ndarray` of delta or gradients.
          '''
          channel = grad_arr.shape[1] // 2
          grad_arr = self.__deconvolution_model.learn(grad_arr[:, :channel], fix_opt_flag=fix_opt_flag)
          delta_arr = self.__cnn.back_propagation(grad_arr)
          if fix_opt_flag is False:
              self.__cnn.optimize(self.__learning_rate, 1)
          return delta_arf learn(self, grad_arr, fix_opt_flag=False):
          '''
          Update this Discriminator by ascending its stochastic gradient.
  
          Args:
              grad_arr:       `np.ndarray` of gradients.
              fix_opt_flag:   If `False`, no optimization in this model will be done.
          
          Returns:
              `np.ndarray` of delta or gradients.
          '''
          channel = grad_arr.shape[1] // 2
          grad_arr = self.__deconvolution_model.learn(grad_arr[:, :channel], fix_opt_flag=fix_opt_flag)
          delta_arr = self.__cnn.back_propagation(grad_arr)
          if fix_opt_flag is False:
              self.__cnn.optimize(self.__learning_rate, 1)
          return delta_arr
docs: Update this Discriminator by ascending its stochastic gradient.
  
          Args:
              grad_arr:       `np.ndarray` of gradients.
              fix_opt_flag:   If `False`, no optimization in this model will be done.
          
          Returns:
              `np.ndarray` of delta or gradients.