【发布时间】:2020-11-01 03:18:03
【问题描述】:
迁移学习完成后,可以使用 tf hub 中的模型。像 MobilNetV2 或 Inception。这些模型需要输入,即一定大小的图像。因此,在应用模型之前,必须将图像调整为这个大小。在这个tutorial 中使用了以下内容:
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)。在这个tutorial 中,预训练模型没有加载 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,我找到了documentation,它准确地解释了它:
可选的形状元组,如果您想使用模型,请指定 输入图像分辨率不是 (224, 224, 3)。这应该 正好有 3 个输入通道(224、224、3)。你也可以省略这个 如果您想从 input_tensor 推断 input_shape 选项。如果 您选择同时包含 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?
当我检查 implementation 的初始值时,图像被调整为 299,299,然后使用以下代码:
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 时我无法做到这一点,这是否可行?
【问题讨论】:
标签: tensorflow keras tensorflow-hub