Как исправить ошибку при проверке цели: ожидается, что Activation_5 имеет 2 измерения, но получил массив с формой (24943, 50, 50, 1) - PullRequest
0 голосов
/ 08 апреля 2019

Я создаю CNN, чтобы предсказывать кошек и собак из kaggle (filetype: jpg).Я использую бэкэнд тензорного потока в среде анаконды с Python 3.6.Но я получаю эту ошибку:

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

import tensorflow as tf
from tensorflow.keras.datasets import cifar10
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten
from tensorflow.keras.layers import Conv2D, MaxPooling2D
import pickle
pickle_in = open("X.pickle","rb")
X = pickle.load(pickle_in)
pickle_in = open("y.pickle","rb"`
y = pickle.load(pickle_in)
X = X/255.0
model = Sequential()
model.add(Conv2D(256, (3, 3), input_shape=X.shape[1:]))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(256, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())  # this converts our 3D feature maps to 1D feature vectors
model.add(Dense(64))
model.add(Dense(1))
model.add(Activation('sigmoid')) 
model.compile(loss='binary_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])
model.fit(X, y, batch_size=32, epochs=3, validation_split=0.3)

Вот таблица model.summary ()

Слой (тип) Выходной параметр Параметр #

conv2d_22 (Conv2D) (Нет, 48, 48, 256) 2560


активации_30 (активация) (нет, 48, 48, 256) 0


max_pooling2d_22 (MaxPooling (нет, 24, 24, 256) 0


conv2d_23 (Conv2D) (Нет, 22, 22, 256) 590080


активации_31 (Активация) (Нет, 22, 22, 256) 0


max_pooling2d_23 (MaxPooling(Нет, 11, 11, 256) 0


flatten_11 (Flatten) (Нет, 30976) 0


density_19 (Плотный) (Нет, 64) 1982528


density_20 (Плотный) (Нет, 1) 65


активации_32 (Активация) (Нет, 1) 0

Всего параметров: 2,575,233 Обучаемые параметры: 2,575,233Не обучаемые параметры: 0


Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

Если вы хотите классифицировать две вещи, вам понадобится, чтобы в вашем последнем плотном слое было 2 нейрона.

Возможно, вы также забыли кодировать целевой вектор одним горячим способом (y).Вы можете сделать это:

y = to_categorical(y)

Надеюсь, это поможет!

0 голосов
/ 08 апреля 2019

Ваш код выглядит странно.

попробуйте model.summary () и проверьте размеры.

...