构建处理加州数据集的宽深感知器时Concatenate层张量错误咨询
问题解决:宽深感知器拼接层的张量转换错误
你的代码错误在于:keras.layers.Concatenate([input, hidden2])只是创建了Concatenate层的实例,并没有将输入张量传入层进行计算,因此concat是层对象而非张量,导致输出层无法接收。
两种修正方案:
方案1:正确调用Concatenate层实例
先创建Concatenate层的实例,再将需要拼接的张量传入实例进行计算,得到张量结果:
input= keras.layers.Input(shape=x_train.shape[1:]) hidden1=keras.layers.Dense(30,activation="relu")(input) hidden2=keras.layers.Dense(30,activation="relu")(hidden1) # 先实例化Concatenate层,可指定axis参数(默认axis=-1) concat_layer = keras.layers.Concatenate() # 将张量列表传入层实例,得到拼接后的张量 concat = concat_layer([input, hidden2]) output=keras.layers.Dense(1)(concat)
方案2:使用便捷函数concatenate
直接调用小写开头的keras.layers.concatenate函数,它会自动处理输入并返回拼接后的张量:
input= keras.layers.Input(shape=x_train.shape[1:]) hidden1=keras.layers.Dense(30,activation="relu")(input) hidden2=keras.layers.Dense(30,activation="relu")(hidden1) # 直接传入张量列表,得到拼接后的张量 concat = keras.layers.concatenate([input, hidden2]) output=keras.layers.Dense(1)(concat)
两者的区别:大写的Concatenate是层类,适合需要重复使用或自定义参数(如拼接轴)的场景;小写的concatenate是封装好的便捷函数,简化了调用流程。
内容的提问来源于stack exchange,提问作者Yogesh Regmi
相关产品推荐
相关产品推荐

