Когда переносное обучение выполнено, можно использовать модель из концентратора tf. Как MobilNetV2 или Inception. Эти модели ожидают входов, изображений определенного размера. Таким образом, перед применением моделей необходимо изменить размер изображений до этого размера. В этом учебнике используется следующее:
feature_extractor_url = "https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/2"
feature_extractor_layer = hub.KerasLayer(feature_extractor_url,
input_shape=(224,224,3))
В этом примере изображения уже были изменены до 224 224 ранее. Меня интересует input_shape=(224,224,3)
. В этом учебнике предварительно обученная модель не загружается с помощью hub-KerasLayer, а вместо этого используется
base_model = tf.keras.applications.MobileNetV2(input_shape=IMG_SHAPE,
include_top=False,
weights='imagenet')
, где IMG_SHAPE - это
IMG_SHAPE = (IMG_SIZE, IMG_SIZE, 3)
, а img_size - 160. Итак, здесь input_shape - input_shape = (160,160,3).
Теперь вернемся к:
feature_extractor_layer = hub.KerasLayer(feature_extractor_url,
input_shape=(224,224,3))
Мне было интересно, что именно параметр input_shape говорит мне или делает? Так что мне не нужно вводить здесь 224 224, верно? Я мог ввести другой размер, например 160, потому что мои изображения были изменены до этого размера? Итак, MobilNetV2 ожидает 224 224, но с этой опцией я могу указать что-то еще? Для tf.keras.applications.MobileNetV2
я нашел документацию , где это точно объясняет:
Необязательный кортеж формы, который нужно указать, если вы хотите использовать модель с разрешением входного изображения, которое не (224, 224, 3). У него должно быть ровно 3 входных канала (224, 224, 3). Вы также можете опустить эту опцию, если хотите вывести input_shape из input_tensor. Если вы решите включить и input_tensor, и input_shape, тогда input_shape будет использоваться, если они совпадают, если формы не совпадают, мы выдадим ошибку. Например, (160, 160, 3) будет одним допустимым значением.
Итак, когда я изменил размер своих изображений до 300,300 и хочу использовать MobileNetV2, могу ли я использовать следующий код:
feature_extractor_url = "https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/2"
feature_extractor_layer = hub.KerasLayer(feature_extractor_url,
input_shape=(300,300,3))
Или мне нужно изменить размер до 224,224 и ввести здесь 224,224?
Когда я проверяю реализацию для начала, размеры изображений изменяются до 299299, а затем используется следующий код :
IMAGE_RES = 299
feature_extractor = hub.KerasLayer(URL,
input_shape=(IMAGE_RES, IMAGE_RES, 3),
trainable=False)
Обязательно ли это делать именно на 299? Или я мог бы также изменить размер до другого размера, например 250, и ввести это в качестве ввода:
IMAGE_RES = 250
feature_extractor = hub.KerasLayer(URL,
input_shape=(IMAGE_RES, IMAGE_RES, 3),
trainable=False)
Таким образом, предварительно обученные модели ожидают определенного фиксированного размера, и этот параметр input_shape существует, чтобы сделать его гибким в случае пользователь хочет использовать другой размер, верно? Но тогда почему все эти примеры меняют размер в точности до размера, предполагаемого моделью? Я мог бы сделать это и с другим размером, верно? Итак, во всех примерах говорится, что модели ожидают этого, и я понимаю это так, что мы должны изменять размер в точности так, как ожидает модель. Но параметр input_shape существует именно для этого, чтобы сделать его гибким, так что мне не нужно изменять размер в точности так, как ожидает модель, а вместо этого просто изменить размер до того, что я хочу, и с параметром input_shape я сообщаю это модели? Как в упомянутом примере с размером изображения 160. Или это возможно в случае, если я использую tf.keras.applications.MobileNetV2
для загрузки предварительно обученных моделей, но при использовании hub.KerasLayer
я не могу этого сделать?