每当我尝试运行这段代码时,它都会显示这个值错误,我不知道为什么。我检查了标签和图像列表的长度,它们是相等的,但 x_train 和 y_train 的长度不同。请注意,由于某些原因我不能使用 tensorflow.keras,它会显示错误,所以我只使用 keras
import numpy as npimport osimport kerasimport tensorflow as tffrom sklearn.preprocessing import LabelBinarizerfrom sklearn.model_selection import train_test_splitimport cv2 as cvpeople = ['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.0x_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.0y_train = np.array(y_train, dtype='float')/255.0print(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)
回答:
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)