如何从葡萄酒数据集解决Keras神经网络实现中的误差

2023-02-06 14:10:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用下面提到的代码在Keras中运行神经网络。有3个唯一的目标变量和13个输入变量。我得到一个错误:ValueError:logits和标签必须具有相同的形状((5,3)vs(5,121))。我无法找出这里的错误。有人能帮忙吗

import pandas
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier
from keras.utils import np_utils
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
from sklearn.preprocessing import LabelEncoder
from sklearn.pipeline import Pipeline
# load dataset

dataset = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data")#,header=None)
dataset.columns = ['Class label','Alcohol','Malic acid','Ash','Alcalinity of ash','Magnesium','Total phenols','Flavanoids','Nonflavanoid phenols','Proanthocyanins','Color intensity','Hue','OD280/OD315 of diluted wines','Proline']
dataset = dataset.values
Y = dataset[:,13]
X = dataset[:,0:13]
encoder = LabelEncoder()
encoder.fit(Y)
encoded_Y = encoder.transform(Y)
# convert integers to dummy variables (i.e. one hot encoded)
dummy_y = np_utils.to_categorical(encoded_Y)
 
# define baseline model
def baseline_model():
    # create model
    model = Sequential()
    model.add(Dense(15, input_dim=13, activation='sigmoid'))
    model.add(Dense(3, activation='sigmoid'))
    # Compile model
    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
    return model
 
estimator = KerasClassifier(build_fn=baseline_model, epochs=10, batch_size=5, verbose=0)
results = cross_val_score(estimator, X, dummy_y, cv=RepeatedKFold(n_splits=10, n_repeats=10))
print("Baseline: %.2f%% (%.2f%%)" % (results.mean()*100, results.std()*100))

1条回答
网友
1楼 · 发布于 2023-02-06 14:10:52

错误显示模型输出为3 dim,但标签为121 dim。 我相信原因是Y = dataset[:,13]不包含class_labels,并且可能有唯一的121值,因为one_hot有121个dims向量

尝试:

Y = dataset[:,0]按原样class_label并具有值{1,2,3}(3类)。 PS:相应地更改X(我不知道这个数据集)

相关问题 更多 >