使用Keras构建多标签分类器时遇AttributeError问题求助
搞定Keras多标签分类里的AttributeError问题
嘿,我帮你排查了下代码,发现几个很典型的小错误,正是它们引发了这个AttributeError: 'Sequential' object has no attribute '_feed_input_names'的问题,咱们一个个来解决:
1. 变量名张冠李戴啦!
你明明把模型实例赋值给了nn变量,结果训练的时候却写了model.fit()——Keras根本找不到叫model的模型,可不就报错嘛!
2. 输入形状和数据不匹配
你的训练数据X_train只有3个特征(f1、f2、f3),但你在第一层全连接层里设置的input_shape=(10,),这相当于告诉模型“我要给你传10个特征的数据”,可实际输入是3个,模型直接懵了,这也是错误的一大原因。
3. 没用的自定义函数可以删掉
你写了个softmax函数但完全没用到,多标签分类用sigmoid输出+binary_crossentropy损失是完全正确的,留着这个函数只会增加代码冗余,删掉就行。
修正后的完整代码
from keras.models import Sequential from keras.layers import Dense import pandas as pd # 如果用pandas加载数据的话需要导入 # 假设你的数据是pandas DataFrame,这里可以根据实际加载方式调整 # X_train = pd.DataFrame([[1,1,5],[0,2,4],[1,0,4]], columns=['f1','f2','f3']) # y_train = pd.DataFrame([[0,1],[1,1],[0,0]], columns=['c1','c2']) # 构建多标签分类模型 nn = Sequential() # 输入维度对应特征数3,用input_dim更直观,也可以写成input_shape=(3,) nn.add(Dense(10, activation="relu", input_dim=3)) nn.add(Dense(2, activation="sigmoid")) # 编译模型,多标签分类用binary_crossentropy是正确的 nn.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) # 训练模型,注意用咱们定义好的nn变量! nn.fit(X_train.values, y_train.values, batch_size=16, epochs=5, verbose=1, validation_split=0.1)
额外提个小建议
你示例里的训练数据只有3条,用validation_split=0.1的话,验证集可能连1条数据都分不到,训练的时候大概率会有警告。建议你多准备点训练数据,或者暂时去掉validation_split参数~
内容的提问来源于stack exchange,提问作者Fluxy
相关产品推荐
相关产品推荐

