构建Keras多输入模型时遇AttributeError:'Model'无'_name'属性
解决Keras Model创建时的AttributeError: 'Model' object has no attribute '_name'错误
嘿,我一眼就看出你代码里的问题啦!
你出错的核心原因是:创建tf.keras.Model时,inputs参数传错了对象。你现在传的是concatenate层输出的张量layer_input,但Keras要求这里必须传入最初定义的Input层实例,而不是拼接后的张量结果。concatenate返回的是层的输出张量,不是合法的模型输入节点,这就导致Keras内部处理元数据时找不到必要的_name属性,抛出了这个错误。
修正后的完整代码
import tensorflow as tf # 定义两个输入层 layer_input1 = tf.keras.Input(shape=(None, 1), name='layer1') layer_input2 = tf.keras.Input(shape=(None, 1), name='layer2') # 拼接两个输入 layer_input = tf.keras.layers.concatenate([layer_input1, layer_input2], name='inputs') # 后续全连接层 fc_1 = tf.keras.layers.Dense(2, activation='relu')(layer_input) fc_1 = tf.keras.layers.Dropout(0.5)(fc_1) fc_2 = tf.keras.layers.Dense(10, activation='relu')(fc_1) output_layer = tf.keras.layers.Dense(1, activation='relu', name='predictions')(fc_2) # 关键修正:传入原始的两个Input层作为模型输入 model = tf.keras.Model(inputs=[layer_input1, layer_input2], outputs=output_layer)
为什么这样能解决问题?
当你把[layer_input1, layer_input2]传给inputs参数时,Keras会把这两个Input层识别为模型的输入节点,而拼接层会作为模型内部的第一个运算层,这样整个数据流从输入到输出的链路就完全合法了,内部的元数据处理也不会再出错。
内容的提问来源于stack exchange,提问作者Noel Saade
相关产品推荐
相关产品推荐

