Я пытаюсь построить модель распознавания лиц, используя керасы.У меня есть изображения с именами предметов и особенностей (не много для глубокого изучения, я знаю, но скоро получу еще)
Но когда я пытаюсь уместить свои данные, я получаю эту ошибку:
ValueError: Ошибка при проверке цели: ожидалось, что плотность_2 имеет 2 измерения, но получен массив с формой (3, 243, 320, 3)
Я пытался изменитьфункция потерь от sparse_categorical_crossentropy
до categorical_crossentropy
.
С закодированными в горячем виде метками с использованием функции "to_categorical" keras
Но она не будет работать
ЗдесьВот как я заполняю свои списки изображениями и метками
###### fill with images
for i in range(0,num_classes):
k=0
for j in range(len(features)):
k+=1
if(i < 10):
sub = "subject0"+str(i)+"."+features[j]+".png"
else:
sub = "subject"+str(i)+"."+features[j]+".png"
imgfile = Image.open(sub)
img = np.array(imgfile)
#print(img.shape)
#print(type(img))
if(k != 3):
train.append(img)
train_labels.append(i)
else :
test.append(img)
test_labels.append(i)
########## train
train = np.asarray(train)
train_labels = np.asarray(train_labels)
########## test
test = np.asarray(test)
test_labels = np.asarray(test_labels)
У меня сейчас 3 класса!(1 класс - один предмет)
Ниже показано, как изображения изменяются и нормализуются.
# Reshape 243x320 pixels, 1 channel (B/W)
train = train.reshape(train.shape[0], img_rows, img_cols, 1)
# Reshape 243x320 pixels, 1 channel (B/W)
test = test.reshape(test.shape[0], img_rows, img_cols, 1)
# Normalize pixel values: [0-255] --> [0.0-1.0]
train, test = train / 255.0, test / 255.0
# One-hot encode labels
test = to_categorical(test, num_classes)
test_labels = to_categorical(test_labels, num_classes)
Я строю простую модель CNN
######### build cnn models
model = Sequential()
model.add(Conv2D(32, kernel_size=(5, 5), padding='same', activation='relu', input_shape=(img_rows,img_cols,1)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, (3, 3), padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))
model.compile(
optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
batch_size = 128
epochs = 10
model.fit(train, test, validation_data=(train_labels, test_labels), batch_size=batch_size, epochs=epochs)
Я думаю, что проблемаэто вывод одного из моего слоя из моей модели.Я пытался переместить плоскую поверхность, но она не сработала.
Спасибо за вашу помощь!