ValueError:检查目标时出错:预期dense_3具有形状(1,)但得到形状为(6,)的数组

我正在尝试使用以下 ANN 模型运行多类分类:


classifier = Sequential()

classifier.add(Dense(units = 9, kernel_initializer = 'uniform', activation = 'relu', input_dim = 18))

classifier.add(Dense(units = 9, kernel_initializer = 'uniform', activation = 'relu'))

classifier.add(Dense(units = 9, kernel_initializer = 'uniform', activation = 'relu'))

classifier.add(Dense(units = 6 ,kernel_initializer = 'uniform', activation = 'softmax'))

classifier.compile(optimizer = 'adam', loss = 'sparse_categorical_crossentropy', metrics = ['accuracy'])

classifier.fit(X_train, y_train, batch_size = 10, epochs = 100) 

y_pred = classifier.predict(X_test) 

其中 X_train 的格式是:


[[31 8 27 ... 2 7 5]

 [31 8 11 ... 1 9 3]

 [6 0 4 ... 1 9 3]

 ...

 [55 55 134 ... 5 5 6]

 [41 9 111 ... 1 3 0]

 [19 9 28 ... 3 0 0]]

y_train 是:


[[0. 0. 0. 1. 0. 0.]

 [0. 0. 0. 0. 1. 0.]

 [0. 0. 0. 0. 1. 0.]

 ...

 [0. 0. 0. 0. 0. 1.]

 [0. 0. 0. 0. 0. 1.]

 [0. 0. 0. 0. 0. 1.]]

X_train 的形状为 (352, 18),y_train 的形状为 (352, 6),X_test 的形状为 (152, 18)。


当它运行时,它给出了以下错误:


Traceback (most recent call last):

  File "H:\p36564\Project ZS\tst1.py", line 110, in <module>

    classifier.fit(X_train, y_train, batch_size = 10, epochs = 100)

  File "H:\p36564\lib\site-packages\keras\engine\training.py", line 950, in fit 

    batch_size=batch_size)

  File "H:\p36564\lib\site-packages\keras\engine\training.py", line 787, in _standardize_user_data

    exception_prefix='target')

  File "H:\p36564\lib\site-packages\keras\engine\training_utils.py", line 137, in standardize_input_data

    str(data_shape))

ValueError: Error when checking target: expected dense_3 to have shape (1,) but got array with shape (6,)

此错误的可能原因是什么?任何帮助,将不胜感激。


ibeautiful
浏览 311回答 1
1回答

开满天机

根据y_train您提供的形状,categorical_crossentropy用作损失函数而不是sparse_categorical_crossentropy.&nbsp;你y_train是one-hot编码而不是稀疏编码。在您的情况下,稀疏编码将是一个如下所示的数组:[3,&nbsp;4,&nbsp;4,&nbsp;...,&nbsp;5,&nbsp;5,&nbsp;5]要亲自尝试,请y_train按如下方式转换为稀疏编码:y_train_&nbsp;=&nbsp;np.argmax(y_train,&nbsp;axis=1)这将sparse_categorical_crossentropy用作损失函数(无需更改模型架构!)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python