CNN迁移学习用Lambda层时遇Sequential对象__name__属性错误
解决思路:AttributeError: 'Sequential' object has no attribute 'name'
这个错误的核心是你将Sequential模型实例直接传入了Lambda层,而Lambda层在序列化配置时,会尝试读取传入对象的__name__属性——但Sequential模型并没有这个属性,只有普通函数才有。
以下是具体解决步骤:
用包装函数包裹Sequential模型调用
不要直接把Sequential模型传给Lambda,而是写一个简单的包装函数,让Lambda调用这个函数:# 假设你的Sequential模型是sub_model def call_sub_model(x): return sub_model(x) # 替换原来的Lambda层定义 lambda_layer = tf.keras.layers.Lambda(call_sub_model)这样Lambda层序列化时会读取包装函数的
__name__,就能正常执行。改用匿名函数简化写法
也可以直接用匿名函数包裹模型调用,更简洁:lambda_layer = tf.keras.layers.Lambda(lambda x: sub_model(x))直接拼接模型(推荐)
如果不需要用Lambda层的特殊逻辑,直接把Sequential模型作为子模型添加到主模型中,比用Lambda包裹更规范:# 主模型构建示例 base_model = tf.keras.applications.Xception(...) model = tf.keras.Sequential([ # 前置层 tf.keras.layers.Input(shape=(224,224,3)), # 直接添加子模型 sub_model, base_model, # 后置层 tf.keras.layers.Dense(1, activation='sigmoid') ])确保环境版本一致
虽然你重装了TF/Keras,但Colab的缓存可能导致版本不匹配。可以重启运行时后,指定和昨天一致的TensorFlow版本安装:!pip install tensorflow==2.15.0
内容的提问来源于stack exchange,提问作者Marlon Hamm
相关产品推荐
相关产品推荐

