Ошибка при проверке цели: ожидалось, что dens_10 будет иметь форму (2,), но получил массив с формой (1,) - PullRequest
0 голосов
/ 29 июня 2019

Я следовал этому руководству по созданию собственного классификатора изображений, но когда я попал в этот раздел кода:

model = Sequential()
model.add(InputLayer(input_shape=[64,64,1]))
model.add(Conv2D(filters=32,kernel_size=5,strides=1,padding='same',activation='relu'))
model.add(MaxPool2D(pool_size=5,padding='same'))

model.add(Conv2D(filters=50,kernel_size=5,strides=1,padding='same',activation='relu'))
model.add(MaxPool2D(pool_size=5,padding='same'))

model.add(Conv2D(filters=80,kernel_size=5,strides=1,padding='same',activation='relu'))
model.add(MaxPool2D(pool_size=5,padding='same'))

model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512,activation='relu'))
model.add(Dropout(rate=0.5))
model.add(Dense(2,activation='softmax'))
optimizer = Adam(lr=1e-3)

model.compile(optimizer=optimizer,loss='categorical_crossentropy',metrics=['accuracy'])
model.fit(x=tr_img_data,y=tr_lbl_data,epochs=50,batch_size=100)
mode.summary()

Я получил следующую ошибку:

Ошибка при проверке цели: ожидается, что плотность_10 будет иметь форму (2,), но получен массив с формой (1,)

Это - полный скриншот ошибки, которую я получил, но я не уверен, как ее исправить. Я довольно новичок в этом и, насколько я могу судить, он должен работать, так как у меня есть 2 класса. Я пытаюсь определить из моих данных (пустых и полных), касающихся статуса парковки. Любая помощь будет оценена!

Это - остальная часть моего кода для контекстной информации.

1 Ответ

0 голосов
/ 29 июня 2019

При внимательном рассмотрении ошибки кажется, что с размером массива one-hot encoded что-то не так. Я попробовал ваш код на своем ноутбуке, и он работает после внесения некоторых изменений в исходный код (не содержащий тестовую часть). Смотрите модифицированный код ниже:

import cv2
import numpy as np
from random import shuffle

from keras.models import Sequential
from keras.layers import Conv2D, InputLayer, MaxPool2D, Dense, Dropout, Flatten
from keras.optimizers import Adam

train_data = 'D:\\ML\\Tensorflow\\Datasets\\'

# Datasets folder
# - car folder - car0.jpg, car0.jpg, ..., car150.jpg
# - truck folder - truck0.jpg, truck0.jpg, ..., truck150.jpg

def one_hot_label(label):
    if label == "car":
        ohl = np.array([1, 0])
    elif label == "truck":
        ohl = np.array([0, 1])
    return ohl

def train_data_with_label():
    train_images = []

    for i in range(151):
        path = train_data+"car\\car"+str(i)+".jpg"
        img = cv2.imread(path, cv2.IMREAD_GRAYSCALE)
        img = cv2.resize(img, (64, 64))
        train_images.append([np.array(img), one_hot_label("car")])

    for j in range(151):
        path = train_data+"truck\\truck"+str(j)+".jpg"
        img = cv2.imread(path, cv2.IMREAD_GRAYSCALE)
        img = cv2.resize(img, (64, 64))
        train_images.append([np.array(img), one_hot_label("truck")])

    shuffle(train_images)
    return train_images

training_images = train_data_with_label()
tr_img_data = np.array([i[0] for i in training_images]).reshape(-1,64,64,1)
tr_lbl_data = np.array([i[1] for i in training_images])

model = Sequential()
model.add(InputLayer(input_shape=[64,64,1]))
model.add(Conv2D(filters=32,kernel_size=5,strides=1,padding='same',activation='relu'))
model.add(MaxPool2D(pool_size=5,padding='same'))

model.add(Conv2D(filters=50,kernel_size=5,strides=1,padding='same',activation='relu'))
model.add(MaxPool2D(pool_size=5,padding='same'))

model.add(Conv2D(filters=80,kernel_size=5,strides=1,padding='same',activation='relu'))
model.add(MaxPool2D(pool_size=5,padding='same'))

model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512,activation='relu'))
model.add(Dropout(rate=0.5))
model.add(Dense(2,activation='softmax'))
optimizer = Adam(lr=1e-3)

model.compile(optimizer=optimizer,loss='categorical_crossentropy',metrics=['accuracy'])
model.fit(x=tr_img_data,y=tr_lbl_data,epochs=10,batch_size=100)
model.summary()

Выход:

Epoch 1/10
302/302 [==============================] - 1s 3ms/step - loss: 5.4860 - acc: 0.5000
Epoch 2/10
302/302 [==============================] - 0s 264us/step - loss: 5.2789 - acc: 0.5430
Epoch 3/10
302/302 [==============================] - 0s 264us/step - loss: 4.8643 - acc: 0.5298
Epoch 4/10
302/302 [==============================] - 0s 264us/step - loss: 4.0198 - acc: 0.5232
Epoch 5/10
302/302 [==============================] - 0s 264us/step - loss: 2.5126 - acc: 0.5000
Epoch 6/10
302/302 [==============================] - 0s 264us/step - loss: 1.1055 - acc: 0.5199
Epoch 7/10
302/302 [==============================] - 0s 281us/step - loss: 0.9190 - acc: 0.5298
Epoch 8/10
302/302 [==============================] - 0s 267us/step - loss: 0.7264 - acc: 0.5563
Epoch 9/10
302/302 [==============================] - 0s 264us/step - loss: 0.7535 - acc: 0.4834
Epoch 10/10
302/302 [==============================] - 0s 264us/step - loss: 0.7393 - acc: 0.4901

Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_7 (Conv2D)            (None, 64, 64, 32)        832       
_________________________________________________________________
max_pooling2d_7 (MaxPooling2 (None, 13, 13, 32)        0         
_________________________________________________________________
conv2d_8 (Conv2D)            (None, 13, 13, 50)        40050     
_________________________________________________________________
max_pooling2d_8 (MaxPooling2 (None, 3, 3, 50)          0         
_________________________________________________________________
conv2d_9 (Conv2D)            (None, 3, 3, 80)          100080    
_________________________________________________________________
max_pooling2d_9 (MaxPooling2 (None, 1, 1, 80)          0         
_________________________________________________________________
dropout_5 (Dropout)          (None, 1, 1, 80)          0         
_________________________________________________________________
flatten_3 (Flatten)          (None, 80)                0         
_________________________________________________________________
dense_5 (Dense)              (None, 512)               41472     
_________________________________________________________________
dropout_6 (Dropout)          (None, 512)               0         
_________________________________________________________________
dense_6 (Dense)              (None, 2)                 1026      
=================================================================
Total params: 183,460
Trainable params: 183,460
Non-trainable params: 0
_________________________________________________________________
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...