Я наткнулся на этот пример , который реализует предварительно обученную модель. В нем говорится:
Форматирование данных
Используйте модуль 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.