Диапазон входных каналов предварительно обученных моделей Tensorflow - PullRequest
0 голосов
/ 09 июля 2020

Я наткнулся на этот пример , который реализует предварительно обученную модель. В нем говорится:

Форматирование данных

Используйте модуль tf.image для форматирования изображений для задачи.

Измените размер изображений до фиксированного размера ввода, и масштабируйте входные каналы в диапазоне [-1,1]

IMG_SIZE = 160 # All images will be resized to 160x160

def format_example(image, label):
  image = tf.cast(image, tf.float32)
  image = (image/127.5) - 1
  image = tf.image.resize(image, (IMG_SIZE, IMG_SIZE))
  return image, label

Мне было интересно об этом. Я понимаю, что image = tf.image.resize(image, (IMG_SIZE, IMG_SIZE)) изменяет размер изображений (которые могут иметь любой размер) до одного постоянного размера. Я понимаю, что image = (image/127.5) - 1 не изменяет фактический размер изображений, но меняет значения (пиксели) (которые находятся в диапазоне от 0 до 255) в диапазоне [-1,1]. В других примерах я видел, как нормализация / стандартизация выполнялась в диапазоне [0,1], поэтому масштабирование было изменено на 1,0 / 255. Я не понимаю, когда я должен использовать какой. Если я использую свою собственную модель, я должен масштабировать до диапазона [-1,1] или [0,1]? Однако, когда я использую предварительно обученную модель, мне нужно знать, что требуется. Я погуглил модель mobilenetv2, но не смог найти никакой документации, говорящей мне, что требуемый входной канал - [-1,1]. В этом комментарии говорится, что все предварительно обученные модели тензорного потока требуют входного канала [-1,1]. Это правда? В частности, правда ли, что все модели в концентраторе тензорного потока (если речь идет об изображениях) требуют диапазона [-1,1]?

Наконец, как мне узнать, что требуется диапазон для предварительно обученной модели? Я бы не разобрался в [-1,1] в случае MobileNetv2 самостоятельно. На странице tensorflow MobileNetv2 я не смог найти эту информацию.

Более того: есть ли способ сделать это автоматически? Итак, я использую функцию, которая автоматически проверяет предварительно обученный набор данных тензорного потока (в котором есть объект, хранящий эту информацию) и применяет его (при условии, что 0-255 - это мой ввод)? Я думаю, что tf.keras.applications.mobilenet_v2.preprocess_input делает что-то еще (я не совсем понимаю, что он делает)? И это тоже только для mobilenetv2.

1 Ответ

0 голосов
/ 10 июля 2020

Обычно вас беспокоит, «какое масштабирование выбрать между [0, 1], [-1, 1]?» Поскольку ответ может отличаться в зависимости от случая, я хотел бы указать на них ниже.

  1. Архитектура CNN лучше работает с входными значениями короткого замкнутого диапазона. Следовательно, и [0, 1], и [-1, 1] могут быть хорошим выбором. Однако в зависимости от архитектуры выбор может быть разным. В результате было бы неплохо попробовать различные масштабы.

  2. Что касается предварительно обученной модели Keras, я заметил, что большинство моделей, использующих остатки (например, ResNets, MobileNetV2, InceptionResNetV2) используйте масштаб [-1, 1]. Использование шкалы [-1, 1] в остатках в некоторых случаях приводит к отключению некоторых ребер. Для дальнейшего понимания рассмотрим перцептрон y = wx + b. Если w = 1 и b = 1, то при использовании ввода x = 1 получается y = 0. Это означает, что при использовании шкалы [-1, 1] некоторые входные значения могут быть обнулены смещением (без установки w=0). Эта концепция в основном верна и для других моделей (за исключением Keras).

  3. Практически все архитектуры Keras используют методы масштабирования. Я считаю, что в некоторых случаях они не выполняли предлагаемые операции, указанные в оригинальных документах. Итак, я считаю, что вам следует придерживаться документации Keras в случае использования их предварительно обученной модели. Если вы не найдете масштабирования в их документации, вам следует избегать его.

Кроме того, вы должны попробовать протестировать различные методы масштабирования, используя разные наборы данных. Однако в большинстве случаев это не должно сильно повысить точность модели. Пожалуйста, дайте мне знать, если у вас возникнут дополнительные вопросы. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...