ValueError: Ошибка при проверке цели: ожидалось, что conv2d_3 имеет 4 измерения, но получил массив с формой (66256, 58) - PullRequest
0 голосов
/ 18 сентября 2018

Я новичок в этом, так что если кто-то может объяснить ошибку, это поможет мне много

код:

train_image, test_image, train_label, test_label = train_test_split(X, Y, test_size=0.30,random_state=42)#splits data, 30% for test and 70% for train 
train_image = train_image.reshape(train_image.shape[0],32,32,3)
test_image = test_image.reshape(test_image.shape[0],32,32,3)
train_label = to_categorical(train_label, num_classes=len(data['Class']))
test_label = to_categorical(test_label, num_classes=len(data['Class']))

model = Sequential()
conv_01 = Conv2D(filters = 32,kernel_size=(3,3),activation='relu',input_shape=(32,32,3))
model.add(conv_01)
conv_02 = Conv2D(filters=64,kernel_size=(3,3),activation='relu')
model.add(conv_02)
pool = MaxPool2D(pool_size = (2,2),strides = (2,2), padding = 'same')
model.add(pool)
conv_11 = Conv2D(filters=64,kernel_size=(3,3),activation='relu')
model.add(conv_11)
pool_2 = MaxPool2D(pool_size=(2,2),strides=(2,2),padding='same')
model.add(pool_2)
drop = Dropout(0.3)
model.add(drop)
conv_out = Conv2D(filters = 3,kernel_size=(1,1),activation='softmax')
model.add(conv_out)
model.compile(optimizer='Adam',loss='categorical_crossentropy',metrics=['accuracy'])
model.fit(train_image,train_label,epochs=10,verbose = 1,validation_data=(test_image,test_label))
tes_loss,test_acc = model.evaluate(test_image,test_label)
prediction = model.predict(test_image)

train_image.shape: (66256, 32, 32, 3)

test_image.shape: (28396, 32, 32, 3)

train_label.shape: (66256, 58)

test_label.shape: (28396, 58)

Сообщение об ошибке:

Traceback (most recent call last):
  File "processing.py", line 59, in <module>
    model.fit(train_image,train_label,epochs=10,verbose = 1,validation_data=(test_image,test_label))
  File "/home/mihir/Desktop/myenv/lib/python3.5/site-packages/tensorflow/python/keras/engine/training.py", line 1278, in fit
    validation_split=validation_split)
  File "/home/mihir/Desktop/myenv/lib/python3.5/site-packages/tensorflow/python/keras/engine/training.py", line 917, in _standardize_user_data
    exception_prefix='target')
  File "/home/mihir/Desktop/myenv/lib/python3.5/site-packages/tensorflow/python/keras/engine/training_utils.py", line 182, in standardize_input_data
    'with shape ' + str(data_shape))
ValueError: Error when checking target: expected conv2d_3 to have 4 dimensions, but got array with shape (66256, 58)

1 Ответ

0 голосов
/ 18 сентября 2018

В контексте классификации, которая, по-видимому, является задачей, которую вы пытаетесь выполнить, вначале обычно имеется несколько слоев + объединения, а затем за ними следует один или несколько плотных слоев (т.е. полностью связанный слой, обычносокращенно как "фк").Еще одна вещь, которую вы должны учитывать, это то, что вы должны использовать слой Flatten прямо перед первым плотным слоем, чтобы сгладить вывод последнего слоя свертки.

Вот ваш код после рассмотрения пунктов выше:

model = Sequential()
model.add(Conv2D(filters = 32,kernel_size=(3,3),activation='relu',input_shape=(32,32,3)))
model.add(Conv2D(filters=64,kernel_size=(3,3),activation='relu'))
model.add(MaxPool2D(pool_size = (2,2),strides = (2,2), padding = 'same'))
model.add(Conv2D(filters=64,kernel_size=(3,3),activation='relu'))
model.add(MaxPool2D(pool_size=(2,2),strides=(2,2),padding='same'))
model.add(Conv2D(filters =128,kernel_size=(1,1),activation='relu'))
model.add(MaxPool2D(pool_size=(2,2),strides=(2,2),padding='same'))
model.add(Flatten())
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.3))
model.add(Dense(58, activation='softmax'))

model.summary()

Вот краткое описание модели:

Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (None, 30, 30, 32)        896       
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 28, 28, 64)        18496     
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 14, 14, 64)        0         
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 12, 12, 64)        36928     
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 6, 6, 64)          0         
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 6, 6, 128)         8320      
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 3, 3, 128)         0         
_________________________________________________________________
flatten_1 (Flatten)          (None, 1152)              0         
_________________________________________________________________
dense_1 (Dense)              (None, 64)                73792     
_________________________________________________________________
dropout_1 (Dropout)          (None, 64)                0         
_________________________________________________________________
dense_2 (Dense)              (None, 58)                3770      
=================================================================
Total params: 142,202
Trainable params: 142,202
Non-trainable params: 0
_________________________________________________________________

...