首页 > 解决方案 > 检查目标时出错:预期 dense_10 的形状为 (1,) 但得到的数组的形状为 (10,)

问题描述

有人可以指导我解决这个问题,为什么我会收到这个错误。提前致谢

当我将标签更改为 1 或 0 时,它起作用了。但现在我试图获得更具体的结果,所以我根据类别更改了标签,即 0,1....9。共10类。

代码

    `print (train.shape)             #when read the .csv file
    print (test.shape)              #when read the .csv file

    y_train = train[:,0]            #assign train labels
    y_test = test[:,0]              #assign test labels

    #reshaping
    X_train = train[:, 1:].reshape(train.shape[0], 13, 3, 1)
    X_test = test[:, 1:].reshape(test.shape[0], 13, 13, 1)
    input_shape = (13, 3, 1)        

    # convert class vectors to binary class matrices
    y_train = keras.utils.to_categorical(y_train, 10)
    y_test = keras.utils.to_categorical(y_test, 10)
    print (X_train.shape)
    print (y_train.shape)
    print (X_test.shape)
    print (y_test.shape)

    model = Sequential()
    model.add(Conv2D(32, kernel_size=(2, 2), activation='relu', 
    input_shape=input_shape))
    model.add(Flatten())
    model.add(Dense(1000, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(10, activation='softmax'))

    model.fit(X_train, y_train,
      batch_size=128,
      epochs=10,
      verbose=1,
      validation_data=(X_test, y_test))          #error in this line`

输出

(82332, 40)                  #when read the .csv file
(175341, 40)                 #when read the .csv file

#reshaped

(82332, 13, 3, 1)
(82332, 10)
(175341, 13, 3, 1)
(175341, 10)

ValueError                  Traceback (most recent call last)
<ipython-input-20-526f89d6ead2> in <module>()
      6           epochs=10,
      7           verbose=1,
----> 8           validation_data=(X_test, y_test))
ValueError: Error when checking target: expected dense_2 to have shape 
(1,) but got array with shape (10,)

标签: python-3.xconv-neural-network

解决方案


您可能需要提供更多信息?你是如何编译模型的?

使用您的代码作为简单测试的基础,我没有收到错误。

from tensorflow.python.keras import Sequential
from tensorflow.python.keras.layers import Conv2D, Flatten, Dense, Dropout
import numpy as np


X_train = np.zeros(shape=(100, 13, 3, 1))
y_train = np.zeros(shape=(100, 10))
X_test = np.zeros(shape=(100, 13, 3, 1))
y_test = np.zeros(shape=(100, 10))

# convert class vectors to binary class matrices
print(X_train.shape)
print(y_train.shape)
print(X_test.shape)
print(y_test.shape)

input_shape = (13, 3, 1)

model = Sequential()
model.add(Conv2D(32, kernel_size=(2, 2), activation='relu',
                 input_shape=input_shape))
model.add(Flatten())
model.add(Dense(1000, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))

model.compile("Adam", loss="categorical_crossentropy")  # Added this line

model.fit(X_train, y_train,
          batch_size=128,
          epochs=10,
          verbose=1,
          validation_data=(X_test, y_test))

Train on 100 samples, validate on 100 samples
Epoch 1/10
100/100 [==============================] - 1s 5ms/sample - loss: 0.0000e+00 - val_loss: 0.0000e+00
Epoch 2/10
100/100 [==============================] - 0s 156us/sample - loss: 0.0000e+00 - val_loss: 0.0000e+00
Epoch 3/10
100/100 [==============================] - 0s 377us/sample - loss: 0.0000e+00 - val_loss: 0.0000e+00
Epoch 4/10
100/100 [==============================] - 0s 312us/sample - loss: 0.0000e+00 - val_loss: 0.0000e+00
Epoch 5/10
100/100 [==============================] - 0s 156us/sample - loss: 0.0000e+00 - val_loss: 0.0000e+00
Epoch 6/10
100/100 [==============================] - 0s 312us/sample - loss: 0.0000e+00 - val_loss: 0.0000e+00
Epoch 7/10
100/100 [==============================] - 0s 221us/sample - loss: 0.0000e+00 - val_loss: 0.0000e+00
Epoch 8/10
100/100 [==============================] - 0s 312us/sample - loss: 0.0000e+00 - val_loss: 0.0000e+00
Epoch 9/10
100/100 [==============================] - 0s 312us/sample - loss: 0.0000e+00 - val_loss: 0.0000e+00
Epoch 10/10
100/100 [==============================] - 0s 377us/sample - loss: 0.0000e+00 - val_loss: 0.0000e+00

推荐阅读