如何从 wine 数据集中解决 Keras 神经网络实现中的错误

Posted

技术标签:

【中文标题】如何从 wine 数据集中解决 Keras 神经网络实现中的错误【英文标题】:How to resolve the error in Keras Neural Networks implementation from the wine dataset 【发布时间】:2021-12-03 03:25:36 【问题描述】:

我正在使用下面提到的代码在 Keras 中运行神经网络。有 3 个唯一目标变量和 13 个输入变量。我收到错误消息:ValueError: logits and labels must have the same shape ((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))

【问题讨论】:

总是将完整的错误消息(从单词“Traceback”开始)作为文本(不是截图,不是链接到外部门户)有问题(不是评论)。还有其他有用的信息。 error 应该显示您在哪一行有问题,您可以使用print() 查看变量中的内容。它被称为"print debuging",它应该是您检查问题的首要任务。如果问题是shape,那么你应该检查变量中的形状。 【参考方案1】:

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

试试:

Y = dataset[:,0] 因为它是class_label 并且具有值1,2,3(3 个类)。 PS:也相应地更改X(我不知道这个数据集)。

【讨论】:

以上是关于如何从 wine 数据集中解决 Keras 神经网络实现中的错误的主要内容,如果未能解决你的问题,请参考以下文章

Keras训练神经网络进行分类并进行交叉验证(Cross Validation)

如何使用 keras 实现多标签分类神经网络

如何在 Keras 中为循环神经网络 (RNN) 使用嵌入层

Keras深度学习实战——使用Keras构建神经网络

如何使用 Keras 将一维输入提供给卷积神经网络(CNN)?

Keras 神经网络中 val-acc 和预测精度之间的巨大差异