ValueError:数据基数不明确。确保所有数组包含相同数量的样本。'x' 大小:8 'y' 大小:3

问题描述 投票:0回答:1

每当我尝试运行此代码时,它都会显示此值错误,我不知道为什么我检查标签和图像列表的长度,它是相等的,但 x_train 和 y_train 的长度不同 请注意,由于某种原因我无法使用tensorflow.keras,它显示错误,所以我只使用keras

import numpy as np
import os
import keras
import tensorflow as tf
from sklearn.preprocessing import LabelBinarizer
from sklearn.model_selection import train_test_split
import cv2 as cv

people = ['H', 'J']
DIR = 'C:\AI'
images = []
labels = []
haar_cascade = cv.CascadeClassifier('haar_face.xml')

for person in people:
    path = os.path.join(DIR, person)
    label = people.index(person)
    for img in os.listdir(path):
        img_path = os.path.join(path, img)
        img_array = cv.imread(img_path)
        gray = cv.cvtColor(img_array, cv.COLOR_BGR2GRAY)
        face_rect = haar_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=6)
        for (x, y, w, h) in face_rect:
            face_roi = img_array[y:y + h, x:x + w]
            face_roi = cv.resize(face_roi, (128, 128))
            images.append(face_roi)
            labels.append(label)



#images = np.array(images, dtype='float')/255.0
#labels = np.array(labels, dtype='float')/255.0

x_train, y_train, x_test, y_test = train_test_split(images, labels, test_size=0.2, random_state=4)

x_train = np.array(x_train, dtype='float')/255.0
y_train = np.array(y_train, dtype='float')/255.0
print(len(x_train), ' ', len(y_train))

model = keras.models.Sequential()
model.add(keras.layers.Conv2D(32, (3, 3), padding='same', activation='relu', input_shape=(128, 128, 3)))
model.add(keras.layers.MaxPool2D(pool_size=(2, 2)))
model.add(keras.layers.BatchNormalization(axis=-1))
model.add(keras.layers.Dropout(0, 2))
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(512, activation='relu'))
model.add(keras.layers.Dense(1, activation='sigmoid'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
hist = model.fit(np.array(x_train), np.array(y_train), epochs=5, batch_size=64)
python deep-learning neural-network conv-neural-network artificial-intelligence
1个回答
0
投票

sklearn.model_selection.train_test_split的示例指出:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

由于您提供的代码以错误的顺序分配返回的拆分,因此我假设您正在为模型的

.fit()
函数提供输入测试数据,而不是火车拆分所需的输出数据。尝试以下操作:

x_train, x_test, y_train, y_test = train_test_split(images, labels, test_size=0.2, random_state=4)
© www.soinside.com 2019 - 2024. All rights reserved.