ValueError: вход 0 несовместим со слоем conv2d_1: ожидаемый ndim = 4, найденный ndim = 3 - PullRequest
0 голосов
/ 11 ноября 2018

После изучения вопросов, уже задаваемых об этой проблеме, я продолжаю представлять ее. Я пытаюсь классифицировать буквы от А до D. Все входные изображения 64x64 и серого цвета.

Первый слой моей CNN:

model = Sequential()
model.add(Conv2D(32, (3,  3), input_shape = input_shape, activation = 'relu'))

И input_shape это исходит от:

# Define the number of classes
num_classes = 4
labels_name={'A':0,'B':1,'C':2,'D':3}

img_data_list=[]
labels_list=[]

for dataset in data_dir_list:
    img_list=os.listdir(data_path+'/'+ dataset)
    print ('Loading the images of dataset-'+'{}\n'.format(dataset))
    label = labels_name[dataset]
    for img in img_list:
    input_img=cv2.imread(data_path + '/'+ dataset + '/'+ img )
          input_img=cv2.cvtColor(input_img, cv2.COLOR_BGR2GRAY)
          input_img_resize=cv2.resize(input_img,(128,128))
          img_data_list.append(input_img_resize)
          labels_list.append(label)

img_data = np.array(img_data_list)
img_data = img_data.astype('float32')
img_data /= 255
print (img_data.shape)

labels = np.array(labels_list)
print(np.unique(labels,return_counts=True))

#convert class labels to on-hot encoding
Y = np_utils.to_categorical(labels, num_classes)

#Shuffle the dataset
x,y = shuffle(img_data,Y, random_state=2)

# Split the dataset
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=2)

#Defining the model
input_shape=img_data[0].shape
print(input_shape)

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Для модели CNN требуется набор данных с большими размерами при использовании нескольких слоев (сверточные слои и пулы). Чтобы избежать проблем с отрицательными размерами, увеличьте размеры изображения или уменьшите слои CNN. Это работает ..

0 голосов
/ 11 ноября 2018

Conv2d ожидает ввода формы (размер пакета, ш, ч, фильтры).

Вам нужно добавить изменение формы, чтобы соответствовать данным перед слоем конвона:

 model.add(Reshape((64, 64, 1)))

Это установит размеры вашей модели на [Нет, 64,64,1] и должно подойти для Conv2d.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...