i try to run the following code but it shows this error
i’ve tried to use
tf.keras.utils.to_categorical
function but if i did it gave me another error wich is
ValueError: Data cardinality is ambiguous. Make sure all arrays contain the same number of samples.’x’ sizes: 128, 128, 128, 128, 128, 128, 128
‘y’ sizes: 7
and this is my code:
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
os.environ['TF_ENABLE_ONEDNN_OPTS'] = '0'
haar_cascade = cv.CascadeClassifier('haar_face.xml')
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))
image_aug = tf.keras.preprocessing.image.ImageDataGenerator(rotation_range=30, shear_range=0.2, zoom_range=0.2, height_shift_range=0.2, width_shift_range=0.2, horizontal_flip=True, fill_mode='nearest')
x_train, x_test, y_train, 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
#y_train = tf.keras.utils.to_categorical(y_train, 3)
#y_test = tf.keras.utils.to_categorical(y_test, 3)
model = tf.keras.models.Sequential()
input_shape = (128, 128, 3)
model.add(tf.keras.layers.Conv2D(32, (3, 3), padding='same', activation='relu', input_shape=input_shape))
model.add(tf.keras.layers.BatchNormalization(axis=-1))
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2)))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Conv2D(64, (3, 3), padding='same', activation='relu'))
model.add(tf.keras.layers.BatchNormalization(axis=-1))
model.add(tf.keras.layers.Conv2D(64, (3, 3), padding='same', activation='relu'))
model.add(tf.keras.layers.BatchNormalization(axis=-1))
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2)))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Conv2D(128, (3, 3), padding='same', activation='relu'))
model.add(tf.keras.layers.BatchNormalization(axis=-1))
model.add(tf.keras.layers.Conv2D(128, (3, 3), padding='same', activation='relu'))
model.add(tf.keras.layers.BatchNormalization(axis=-1))
model.add(tf.keras.layers.Conv2D(128, (3, 3), padding='same', activation='relu'))
model.add(tf.keras.layers.BatchNormalization(axis=-1))
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2)))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(512, activation='relu'))
model.add(tf.keras.layers.BatchNormalization())
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Dense(3, activation='softmax'))
NAME = 'people-{}'.format(int(time.time()))
tensorboard = tf.keras.callbacks.TensorBoard(log_dir='logs/{}'.format(NAME))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
history = model.fit(x_train, y_train, batch_size=32, epochs=10, callbacks=[tensorboard], validation_data=(x_test, y_test), steps_per_epoch=len(x_train) // 32)
<code>import numpy as np
import os
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
import cv2 as cv
import pickle
import time
os.environ['TF_ENABLE_ONEDNN_OPTS'] = '0'
import tensorflow as tf
people = ['H', 'J', 'A']
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)
image_aug = tf.keras.preprocessing.image.ImageDataGenerator(rotation_range=30, shear_range=0.2, zoom_range=0.2, height_shift_range=0.2, width_shift_range=0.2, horizontal_flip=True, fill_mode='nearest')
x_train, x_test, y_train, 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
#y_train = tf.keras.utils.to_categorical(y_train, 3)
#y_test = tf.keras.utils.to_categorical(y_test, 3)
model = tf.keras.models.Sequential()
input_shape = (128, 128, 3)
model.add(tf.keras.layers.Conv2D(32, (3, 3), padding='same', activation='relu', input_shape=input_shape))
model.add(tf.keras.layers.BatchNormalization(axis=-1))
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2)))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Conv2D(64, (3, 3), padding='same', activation='relu'))
model.add(tf.keras.layers.BatchNormalization(axis=-1))
model.add(tf.keras.layers.Conv2D(64, (3, 3), padding='same', activation='relu'))
model.add(tf.keras.layers.BatchNormalization(axis=-1))
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2)))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Conv2D(128, (3, 3), padding='same', activation='relu'))
model.add(tf.keras.layers.BatchNormalization(axis=-1))
model.add(tf.keras.layers.Conv2D(128, (3, 3), padding='same', activation='relu'))
model.add(tf.keras.layers.BatchNormalization(axis=-1))
model.add(tf.keras.layers.Conv2D(128, (3, 3), padding='same', activation='relu'))
model.add(tf.keras.layers.BatchNormalization(axis=-1))
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2)))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(512, activation='relu'))
model.add(tf.keras.layers.BatchNormalization())
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Dense(3, activation='softmax'))
NAME = 'people-{}'.format(int(time.time()))
tensorboard = tf.keras.callbacks.TensorBoard(log_dir='logs/{}'.format(NAME))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
history = model.fit(x_train, y_train, batch_size=32, epochs=10, callbacks=[tensorboard], validation_data=(x_test, y_test), steps_per_epoch=len(x_train) // 32)
</code>
import numpy as np
import os
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
import cv2 as cv
import pickle
import time
os.environ['TF_ENABLE_ONEDNN_OPTS'] = '0'
import tensorflow as tf
people = ['H', 'J', 'A']
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)
image_aug = tf.keras.preprocessing.image.ImageDataGenerator(rotation_range=30, shear_range=0.2, zoom_range=0.2, height_shift_range=0.2, width_shift_range=0.2, horizontal_flip=True, fill_mode='nearest')
x_train, x_test, y_train, 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
#y_train = tf.keras.utils.to_categorical(y_train, 3)
#y_test = tf.keras.utils.to_categorical(y_test, 3)
model = tf.keras.models.Sequential()
input_shape = (128, 128, 3)
model.add(tf.keras.layers.Conv2D(32, (3, 3), padding='same', activation='relu', input_shape=input_shape))
model.add(tf.keras.layers.BatchNormalization(axis=-1))
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2)))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Conv2D(64, (3, 3), padding='same', activation='relu'))
model.add(tf.keras.layers.BatchNormalization(axis=-1))
model.add(tf.keras.layers.Conv2D(64, (3, 3), padding='same', activation='relu'))
model.add(tf.keras.layers.BatchNormalization(axis=-1))
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2)))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Conv2D(128, (3, 3), padding='same', activation='relu'))
model.add(tf.keras.layers.BatchNormalization(axis=-1))
model.add(tf.keras.layers.Conv2D(128, (3, 3), padding='same', activation='relu'))
model.add(tf.keras.layers.BatchNormalization(axis=-1))
model.add(tf.keras.layers.Conv2D(128, (3, 3), padding='same', activation='relu'))
model.add(tf.keras.layers.BatchNormalization(axis=-1))
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2)))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(512, activation='relu'))
model.add(tf.keras.layers.BatchNormalization())
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Dense(3, activation='softmax'))
NAME = 'people-{}'.format(int(time.time()))
tensorboard = tf.keras.callbacks.TensorBoard(log_dir='logs/{}'.format(NAME))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
history = model.fit(x_train, y_train, batch_size=32, epochs=10, callbacks=[tensorboard], validation_data=(x_test, y_test), steps_per_epoch=len(x_train) // 32)
if i uncomment the to_categorical function and then print the shape of x_train and y_train
it shows (24, 128, 128, 3) for x and (24, 3) for y