TensorFlow Keras 使用输入小于 32x32 的 MobileNetV2 模型
TensorFlow Keras Use MobileNetV2 Model with Inputs less than 32x32
我想使用尺寸小于 32x32
的没有权重的 MobileNetV2
模型。如果我尝试
model = tf.keras.applications.MobileNetV2(input_shape=(10,10,3),include_top=False,weights=None)
报错
ValueError: Input size must be at least 32x32; got `input_shape=(10, 10, 3)
我知道我不能使用所有层,因为模型中的分辨率降低太多,所以假设我想使用模型的前 30 个层。
如何创建使用 MobileNetV2 的前 30 层并具有 10x10x3
输入形状的模型?我不想手动创建MobileNetV2模型,而是想用tf.keras.applications.MobileNetV2
方式加载
从 MobileNet
创建一个新模型,将前 30 层作为输出(即多输出模型)。方法如下:
base = tf.keras.applications.MobileNetV2(include_top=False,weights=None)
features_list = [layer.output for layer in base.layers[:30]]
model = keras.Model(inputs=base.input, outputs=features_list)
len(model.layers) # 30
测试
img = np.random.random((1, 10, 10, 3)).astype("float32")
model(img)
[<tf.Tensor: shape=(1, 10, 10, 3), dtype=float32, numpy=
array([[[[0.7529889 , 0.18826886, 0.9792667 ],
[0.52218866, 0.36510527, 0.4743469 ],
...
...
根据您的评论。我们能做到这一点。如果您希望模型具有单个输出,即 MobileNetV2 模型第 30 层的输出,请执行以下操作。
from keras import layers
input_s = layers.Input((10,10,3))
import tensorflow as tf
base = tf.keras.applications.MobileNetV2(include_top=False,
weights=None,
input_tensor = input_s)
from tensorflow import keras
model = keras.Model(inputs=base.input, outputs=base.layers[30].output)
model.summary()
...
...
我想使用尺寸小于 32x32
的没有权重的 MobileNetV2
模型。如果我尝试
model = tf.keras.applications.MobileNetV2(input_shape=(10,10,3),include_top=False,weights=None)
报错
ValueError: Input size must be at least 32x32; got `input_shape=(10, 10, 3)
我知道我不能使用所有层,因为模型中的分辨率降低太多,所以假设我想使用模型的前 30 个层。
如何创建使用 MobileNetV2 的前 30 层并具有 10x10x3
输入形状的模型?我不想手动创建MobileNetV2模型,而是想用tf.keras.applications.MobileNetV2
方式加载
从 MobileNet
创建一个新模型,将前 30 层作为输出(即多输出模型)。方法如下:
base = tf.keras.applications.MobileNetV2(include_top=False,weights=None)
features_list = [layer.output for layer in base.layers[:30]]
model = keras.Model(inputs=base.input, outputs=features_list)
len(model.layers) # 30
测试
img = np.random.random((1, 10, 10, 3)).astype("float32")
model(img)
[<tf.Tensor: shape=(1, 10, 10, 3), dtype=float32, numpy=
array([[[[0.7529889 , 0.18826886, 0.9792667 ],
[0.52218866, 0.36510527, 0.4743469 ],
...
...
根据您的评论。我们能做到这一点。如果您希望模型具有单个输出,即 MobileNetV2 模型第 30 层的输出,请执行以下操作。
from keras import layers
input_s = layers.Input((10,10,3))
import tensorflow as tf
base = tf.keras.applications.MobileNetV2(include_top=False,
weights=None,
input_tensor = input_s)
from tensorflow import keras
model = keras.Model(inputs=base.input, outputs=base.layers[30].output)
model.summary()
...
...