构建神经网络及训练时遇TypeError问题求助
模型训练报错求助:KerasLayer与Sequential组合 TypeError问题
训练模型时遇到TypeError停滞,相关代码如下:
link = "https://tfhub.dev/google/imagenet/efficientnet_v2_imagenet1k_b0/feature_vector/2" input_layer = tf.keras.layers.Input(shape=(224, 224, 3), dtype=tf.float32, name="input", trainable=False) feature_extractor = hub.KerasLayer(link, trainable=False) model = tf.keras.Sequential([ input_layer, feature_extractor, tf.keras.layers.Dense(data_info.features['label'].num_classes, activation="softmax") ])
运行时触发如下报错:
TypeError Traceback (most recent call last) Cell In[64], line 7 4 input_layer = tf.keras.layers.Input(shape=(224, 224, 3), dtype=tf.float32, name="input") 5 feature_extractor = hub.KerasLayer(link, trainable=False) ----> 7 model = tf.keras.Sequential([ 8 input_layer, 9 feature_extractor, 10 tf.keras.layers.Dense(data_info.features['label'].num_classes, activation="softmax") 11 ]) 13 model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"]) 14 model.summary() File c:\Users\steel\AppData\Local\Programs\Python\Python310\lib\site-packages\tensorflow\python\trackable\base.py:204, in no_automatic_dependency_tracking.<locals>._method_wrapper(self, *args, **kwargs) 202 self._self_setattr_tracking = False # pylint: disable=protected-access 203 try: ---> 204 result = method(self, *args, **kwargs) 205 finally: 206 self._self_setattr_tracking = previous_value # pylint: disable=protected-access File c:\Users\steel\AppData\Local\Programs\Python\Python310\lib\site-packages\keras\src\utils\traceback_utils.py:70, in filter_traceback.<locals>.error_handler(*args, **kwargs) 67 filtered_tb = _process_traceback_frames(e.__traceback__) 68 # To get the full stack trace, call: 69 # `tf.debugging.disable_traceback_filtering()` ---> 70 raise e.with_traceback(filtered_tb) from None ... Call arguments received by layer "keras_layer_28" (type KerasLayer): • inputs=tf.Tensor(shape=(None, 224, 224, 3), dtype=float32) • training=None
已尝试添加/移除输入层、修改层参数,均未解决问题,怀疑是TF Hub提取的网络存在问题,求验证方法及解决建议。
解决建议及验证方法
调整模型构建方式,移除独立Input层
Sequential模型中直接添加带input_shape参数的KerasLayer,避免Input层与Hub层的兼容性问题:link = "https://tfhub.dev/google/imagenet/efficientnet_v2_imagenet1k_b0/feature_vector/2" # 直接在KerasLayer中指定输入形状 feature_extractor = hub.KerasLayer(link, trainable=False, input_shape=(224,224,3)) model = tf.keras.Sequential([ feature_extractor, tf.keras.layers.Dense(data_info.features['label'].num_classes, activation="softmax") ])单独验证TF Hub模块可用性
编写测试代码,直接调用Hub层,确认模块本身是否能正常工作:import tensorflow as tf import tensorflow_hub as hub link = "https://tfhub.dev/google/imagenet/efficientnet_v2_imagenet1k_b0/feature_vector/2" feature_extractor = hub.KerasLayer(link, trainable=False) # 生成测试输入张量 test_input = tf.random.normal((1, 224, 224, 3)) # 显式指定training参数为False output = feature_extractor(test_input, training=False) print("模块输出形状:", output.shape) # 正常输出应为(1, 1280)如果此测试报错,说明模块加载或版本兼容性存在问题。
检查TensorFlow与TF Hub版本兼容性
该EfficientNet V2特征向量模块要求TensorFlow 2.6及以上版本,建议使用匹配的稳定版本组合(如TensorFlow 2.15 + TF Hub 0.15.0),避免版本不兼容导致的底层错误。显式指定training参数
在构建模型时,确保Hub层的training参数明确设置为False,避免默认的None值引发的内部逻辑冲突:# 在模型中调用Hub层时显式指定training model = tf.keras.Sequential([ input_layer, tf.keras.layers.Lambda(lambda x: feature_extractor(x, training=False)), tf.keras.layers.Dense(data_info.features['label'].num_classes, activation="softmax") ])
内容的提问来源于stack exchange,提问作者Jaheen Ahsan
相关产品推荐
相关产品推荐

