我正在尝试使用已经训练好的模型将学习转移到我将创建并仅修改最后几层的模型。这样做的目标是使用已经训练的模型(已经在数百万张图像上进行训练)来帮助我的模型对食品识别进行分类。我对 Keras 还很陌生,我面临着一个问题,我现在开始理解它,但不知道如何解决
# Load the model from TensorFlow Hub
model_url = "https://www.kaggle.com/models/tensorflow/resnet-50/TensorFlow2/classification/1"
hub_layer = hub.KerasLayer(model_url, input_shape=(224, 224, 3))
# Create a Sequential model
model = tf.keras.Sequential()
# Add the TensorFlow Hub layer to the Sequential model
model.add(hub_layer)
# Build the Sequential model
model.build((None, 224, 224, 3))
# Summary of the model
model.summary()
错误:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[56], line 9
6 model = tf.keras.Sequential()
8 # Add the TensorFlow Hub layer to the Sequential model
----> 9 model.add(hub_layer)
11 # Build the Sequential model
12 model.build((None, 224, 224, 3))
File c:\Users\Karim\AppData\Local\Programs\Python\Python312\Lib\site-packages\keras\src\models\sequential.py:95, in Sequential.add(self, layer, rebuild)
93 layer = origin_layer
94 if not isinstance(layer, Layer):
---> 95 raise ValueError(
96 "Only instances of `keras.Layer` can be "
97 f"added to a Sequential model. Received: {layer} "
98 f"(of type {type(layer)})"
99 )
100 if not self._is_layer_name_unique(layer):
101 raise ValueError(
102 "All layers added to a Sequential model "
103 f"should have unique names. Name '{layer.name}' is already "
104 "the name of a layer in this model. Update the `name` argument "
105 "to pass a unique name."
106 )
ValueError: Only instances of `keras.Layer` can be added to a Sequential model. Received: <tensorflow_hub.keras_layer.KerasLayer object at 0x00000190C6B8AD20> (of type <class 'tensorflow_hub.keras_layer.KerasLayer'>)
您看到的错误消息是因为 TensorFlow Hub 中的
KerasLayer
对象不是 keras.Layer
的实例,因此无法直接添加到 Keras 顺序模型中。
要解决此问题,您需要在创建顺序模型后使用
tf.keras.layers.Lambda
将 TensorFlow Hub 层转换为 Keras 层。
您可以在声明 hub_layer 后立即使用它: hub_layer = tf.keras.layers.Lambda(hub_layer)
所以在这种特殊情况下,你只剩下:
... hub_layer = hub.KerasLayer(model_url, input_shape=(224, 224, 3)) hub_layer = tf.keras.layers.Lambda(hub_layer) ...