Модель Retraining Incpetion v3 без изменения формы слоя

Я переобучил начальную модель v3 для пользовательского набора данных. Но после переподготовки, когда я посмотрел на TenosorGraph, я обнаружил, что добавлен слой с именем rehape, за которым следует полностью связанный слой. Мне нужно запустить модель на встроенном устройстве с использованием механизма мгновенной обработки изображений (SNPE), но на данный момент он не поддерживает слой изменения формы для работы на DSP.

Есть ли возможный способ переподготовки Inception v3 без добавления измененного слоя. Ниже приведен код переобучения, в который добавлен слой изменения формы.

enter code here
              def create_model_info(architecture):
  """Given the name of a model architecture, returns information about it.

  There are different base image recognition pretrained models that can be
  retrained using transfer learning, and this function translates from the name
  of a model to the attributes that are needed to download and train with it.

  Args:
    architecture: Name of a model architecture.

  Returns:
    Dictionary of information about the model, or None if the name isn't
    recognized

  Raises:
    ValueError: If architecture name is unknown.
  """
  architecture = architecture.lower()
  if architecture == 'inception_v3':
    # pylint: disable=line-too-long
    data_url = 'http://download.tensorflow.org/models/image/imagenet/inception-2015-12-05.tgz'
    # pylint: enable=line-too-long
    bottleneck_tensor_name = 'pool_3/_reshape:0'
    bottleneck_tensor_size = 2048
    input_width = 299
    input_height = 299
    input_depth = 3
    resized_input_tensor_name = 'Mul:0'
    model_file_name = 'classify_image_graph_def.pb'
    input_mean = 128
    input_std = 128
      elif architecture.startswith('mobilenet_'):
        parts = architecture.split('_')
        if len(parts) != 3 and len(parts) != 4:
          tf.logging.error("Couldn't understand architecture name '%s'",
                           architecture)
          return None
        version_string = parts[1]
        if (version_string != '1.0' and version_string != '0.75' and
            version_string != '0.50' and version_string != '0.25'):
          tf.logging.error(
              """"The Mobilenet version should be '1.0', '0.75', '0.50', or '0.25',
      but found '%s' for architecture '%s'""",
              version_string, architecture)
          return None
        size_string = parts[2]
        if (size_string != '224' and size_string != '192' and
            size_string != '160' and size_string != '128'):
          tf.logging.error(
              """The Mobilenet input size should be '224', '192', '160', or '128',
     but found '%s' for architecture '%s'""",
              size_string, architecture)
          return None
        if len(parts) == 3:
          is_quantized = False
        else:
          if parts[3] != 'quantized':
            tf.logging.error(
                "Couldn't understand architecture suffix '%s' for '%s'", parts[3],
                architecture)
            return None
          is_quantized = True
        data_url = 'http://download.tensorflow.org/models/mobilenet_v1_'
        data_url += version_string + '_' + size_string + '_frozen.tgz'
        bottleneck_tensor_name = 'MobilenetV1/Predictions/Reshape:0'
        bottleneck_tensor_size = 1001
        input_width = int(size_string)
        input_height = int(size_string)
        input_depth = 3
        resized_input_tensor_name = 'input:0'
        if is_quantized:
          model_base_name = 'quantized_graph.pb'
        else:
          model_base_name = 'frozen_graph.pb'
        model_dir_name = 'mobilenet_v1_' + version_string + '_' + size_string
        model_file_name = os.path.join(model_dir_name, model_base_name)
        input_mean = 127.5
        input_std = 127.5
      else:
        tf.logging.error("Couldn't understand architecture name '%s'", architecture)
        raise ValueError('Unknown architecture', architecture)

      return {
          'data_url': data_url,
          'bottleneck_tensor_name': bottleneck_tensor_name,
          'bottleneck_tensor_size': bottleneck_tensor_size,
          'input_width': input_width,
          'input_height': input_height,
          'input_depth': input_depth,
          'resized_input_tensor_name': resized_input_tensor_name,
          'model_file_name': model_file_name,
          'input_mean': input_mean,
          'input_std': input_std,
      }

Код участника доступен здесь: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/image_retraining/retrain.py

2 ответа

Из SNPE SDK v1.8.0, TensorFlow 's reshape слой поддерживается.

Они не добавляют слой изменения формы, они выбирают слой изменения формы из обученной модели. После этого они добавят свой собственный слой поверх выходных данных этого измененного слоя.

Если вы хотите выбрать слой более высокого уровня, замените 'pool_3/_reshape:0' на имя нужного слоя. Вы должны быть в состоянии вывести имена из кода модели: https://github.com/tensorflow/models/blob/master/slim/nets/inception_v3.py

или, возможно, проще, напечатайте имена всех узлов в вашем Graph_def и выберите тот, который вы хотите:

    for node in graph_def.node:
        print(node.name)
Другие вопросы по тегам