如何从 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 中为循环神经网络 (RNN) 使用嵌入层