【问题标题】:ValueError: Error when checking target: expected dense_3 to have shape (1,) but got array with shape (6,)ValueError:检查目标时出错:预期dense_3的形状为(1,),但数组的形状为(6,)
【发布时间】:2019-05-10 21:24:44
【问题描述】:

我正在尝试使用以下 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,)

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

【问题讨论】:

    标签: python python-3.x keras classification


    【解决方案1】:

    y_train 的形状与您提供的一样,使用categorical_crossentropy 作为损失函数,而不是sparse_categorical_crossentropy。您的 y_train 是单热编码而不是稀疏编码。在您的情况下,稀疏编码将是一个如下所示的数组:

    [3, 4, 4, ..., 5, 5, 5]
    

    要亲自尝试,请将y_train 转换为稀疏编码,如下所示:

    y_train_ = np.argmax(y_train, axis=1)
    

    这将与 sparse_categorical_crossentropy 作为损失函数一起使用(无需更改模型架构!)

    【讨论】:

      猜你喜欢
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 2018-08-29
      • 2020-05-19
      • 2019-01-16
      • 1970-01-01
      相关资源
      最近更新 更多