docs: def explain_image(self, labels, instance, column_name=None, num_features=100000,
                        num_samples=300, batch_size=200, hide_color=0):
          """Explain an image of a prediction.
  
          It analyze the prediction by LIME, and returns a report of which words are most impactful
          in contributing to certain labels.
  
          Args:
            labels: a list of labels to explain.
            instance: the prediction instance. It needs to conform to model's input. Can be a csv
                line string, or a dict.
            column_name: which image column to explain. Can be None if there is only one image column
                in the model input.
            num_features: maximum number of areas (features) to analyze. Passed to
                LIME LimeImageExplainer directly.
            num_samples: size of the neighborhood to learn the linear model. Passed to
                LIME LimeImageExplainer directly.
            batch_size: size of batches passed to predict_fn. Passed to
                LIME LimeImageExplainer directly.
            hide_color: the color used to perturb images. Passed to
                LIME LimeImageExplainer directly.
  
          Returns:
            A LIME's lime.explanation.Explanation.
  
          Throws:
            ValueError if the given image column is not found in model input or column_name is None
                but there are multiple image columns in model input.
          """
  
          from lime.lime_image import LimeImageExplainer
  
          if len(self._image_columns) > 1 and not column_name:
              raise ValueError('There are multiple image columns in the input of the model. ' +
                               'Please specify "column_name".')
          elif column_name and column_name not in self._image_columns:
              raise ValueError('Specified column_name "%s" not found in the model input.'
                               % column_name)
  
          image_column_name = column_name if column_name else self._image_columns[0]
          if isinstance(instance, six.string_types):
              instance = next(csv.DictReader([instance], fieldnames=self._headers))
  
          predict_fn = self._make_image_predict_fn(labels, instance, image_column_name)
          explainer = LimeImageExplainer()
          with file_io.FileIO(instance[image_column_name], 'rb') as fi:
              im = Image.open(fi)
          im.thumbnail((299, 299), Image.ANTIALIAS)
          rgb_im = np.asarray(im.convert('RGB'))
          exp = explainer.explain_instance(
              rgb_im, predict_fn, labels=range(len(labels)), top_labels=None,
              hide_color=hide_color, num_features=num_features,
              num_samples=num_samples, batch_size=batch_size)
          return exp