code: def get_or_create_bottleneck(
      sess,
      image_lists,
      label_name,
      index,
      image_dir,
      category,
      bottleneck_dir,
      jpeg_data_tensor,
      decoded_image_tensor,
      resized_input_tensor,
      bottleneck_tensor,
      module_name,
  ):
      """Retrieves or calculates bottleneck values for an image.
  
      If a cached version of the bottleneck data exists on-disk, return that,
      otherwise calculate the data and save it to disk for future use.
  
      Args:
        sess: The current active TensorFlow Session.
        image_lists: OrderedDict of training images for each label.
        label_name: Label string we want to get an image for.
        index: Integer offset of the image we want. This will be modulo-ed by the
        available number of images for the label, so it can be arbitrarily large.
        image_dir: Root folder string of the subfolders containing the training
        images.
        category: Name string of which set to pull images from - training, testing,
        or validation.
        bottleneck_dir: Folder string holding cached files of bottleneck values.
        jpeg_data_tensor: The tensor to feed loaded jpeg data into.
        decoded_image_tensor: The output of decoding and resizing the image.
        resized_input_tensor: The input node of the recognition graph.
        bottleneck_tensor: The output tensor for the bottleneck values.
        module_name: The name of the image module being used.
  
      Returns:
        Numpy array of values produced by the bottleneck layer for the image.
      """
      label_lists = image_lists[label_name]
      sub_dir = label_lists["dir"]
      sub_dir_path = os.path.join(bottleneck_dir, sub_dir)
      ensure_dir_exists(sub_dir_path)
      bottleneck_path = get_bottleneck_path(
          image_lists,
          label_name,
          index,
          bottleneck_dir,
          category,
          module_name,
      )
      if not os.path.exists(bottleneck_path):
          create_bottleneck_file(
              bottleneck_path,
              image_lists,
              label_name,
              index,
              image_dir,
              category,
              sess,
              jpeg_data_tensor,
              decoded_image_tensor,
              resized_input_tensor,
              bottleneck_tensor,
          )
      with tf.gfile.GFile(bottleneck_path, "r") as bottleneck_file:
          bottleneck_string = bottleneck_file.read()
      did_hit_error = False
      try:
          bottleneck_values = [
              float(x) for x in bottleneck_string.split(",")
          ]
      except ValueError:
          logging.warning("Invalid float found, recreating bottleneck")
          did_hit_error = True
      if did_hit_error:
          create_bottleneck_file(
              bottleneck_path,
              image_lists,
              label_name,
              index,
              image_dir,
              category,
              sess,
              jpeg_data_tensor,
              decoded_image_tensor,
              resized_input_tensor,
              bottleneck_tensor,
          )
          with tf.gfile.GFile(bottleneck_path, "r") as bottleneck_file:
              bottleneck_string = bottleneck_file.read()
          # Allow exceptions to propagate here, since they shouldn't happen after a
          # fresh creation
          bottleneck_values = [
              float(x) for x in bottleneck_string.split(",")
          ]
      return bottleneck_values
  
imports: from absl import logging
  import argparse
  import collections
  from datetime import datetime
  import hashlib
  import os.path
  import random
  import re
  import sys
  import numpy
  import tensorflow
  import tensorflow_hub
  from tensorflow.contrib import quantize
label_desc: Use image node_id 8 for calling a global function with example usage: get_or_create_bottleneck(sess, image_lists, label_name, index, image_dir, category, bottleneck_dir, jpeg_data_tensor, decoded_image_tensor, resized_input_tensor, bottleneck_tensor, module_name) and returns: bottleneck_values