使用 Keras 进行图像分类的迁移学习

问题描述 投票:0回答:2

我正在尝试使用已经训练好的模型将学习转移到我将创建并仅修改最后几层的模型。这样做的目标是使用已经训练的模型(已经在数百万张图像上进行训练)来帮助我的模型对食品识别进行分类。我对 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'>)
python machine-learning keras
2个回答
0
投票

您看到的错误消息是因为 TensorFlow Hub 中的

KerasLayer
对象不是
keras.Layer
的实例,因此无法直接添加到 Keras 顺序模型中。

要解决此问题,您需要在创建顺序模型后使用

tf.keras.layers.Lambda
将 TensorFlow Hub 层转换为 Keras 层。


0
投票

您可以在声明 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) ...

© www.soinside.com 2019 - 2024. All rights reserved.