Ошибка в «из keras.utils импортировать в категорию»

#python #keras

Вопрос:

У меня есть проблема с этим кодом , почему ?

код :

 import cv2
import numpy as np
from PIL import Image
import os
import numpy as np
import cv2
import os
import h5py
import dlib
from imutils import face_utils
from keras.models import load_model
import sys
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D,Dropout
from keras.layers import Dense, Activation, Flatten
from keras.utils import to_categorical
from keras import backend as K 
from sklearn.model_selection import train_test_split
from Model import model
from keras import callbacks

# Path for face image database
path = 'dataset'

recognizer = cv2.face.LBPHFaceRecognizer_create()
detector = cv2.CascadeClassifier("haarcascade_frontalface_default.xml");


def downsample_image(img):
    img = Image.fromarray(img.astype('uint8'), 'L')
    img = img.resize((32,32), Image.ANTIALIAS)
    return np.array(img)



# function to get the images and label data
def getImagesAndLabels(path):
    
    path = 'dataset'
    imagePaths = [os.path.join(path,f) for f in os.listdir(path)]     
    faceSamples=[]
    ids = []

    for imagePath in imagePaths:
        
        #if there is an error saving any jpegs
        try:
            PIL_img = Image.open(imagePath).convert('L') # convert it to grayscale
        except:
            continue    
        img_numpy = np.array(PIL_img,'uint8')

        id = int(os.path.split(imagePath)[-1].split(".")[1])
        faceSamples.append(img_numpy)
        ids.append(id)
    return faceSamples,ids

print ("n [INFO] Training faces now.")
faces,ids = getImagesAndLabels(path)

K.clear_session()
n_faces = len(set(ids))
model = model((32,32,1),n_faces)
faces = np.asarray(faces)
faces = np.array([downsample_image(ab) for ab in faces])
ids = np.asarray(ids)
faces = faces[:,:,:,np.newaxis]
print("Shape of Data: "   str(faces.shape))
print("Number of unique faces : "   str(n_faces))


ids = to_categorical(ids)

faces = faces.astype('float32')
faces /= 255.

x_train, x_test, y_train, y_test = train_test_split(faces,ids, test_size = 0.2, random_state = 0)

checkpoint = callbacks.ModelCheckpoint('trained_model.h5', monitor='val_acc',
                                           save_best_only=True, save_weights_only=True, verbose=1)
                                    
model.fit(x_train, y_train,
             batch_size=32,
             epochs=10,
             validation_data=(x_test, y_test),
             shuffle=True,callbacks=[checkpoint])
             

# Print the numer of faces trained and end program
print("enter code here`n [INFO] "   str(n_faces)   " faces trained. Exiting Program")
 

 the output:
------------------
File "D:my hard samماجستيرسنة ثانيةالبحثpythonReal-Time-Face-Recognition-Using-CNN-masterReal-Time-Face-Recognition-Using-CNN-master2_face_training.py", line 16, in <module>
    from keras.utils import to_categorical
ImportError: cannot import name 'to_categorical' from 'keras.utils' (C:UsersomarPycharmProjectsSnakGamevenvlibsite-packageskerasutils__init__.py)
 

Комментарии:

1. какова ваша tf версия?

2. как насчет переноса вашего кода в tensorflow2? Керасы больше не поддерживаются, и они перешли на тензорный поток. Вам просто нужно установить tensorflow и изменить инструкцию импорта с «из keras.utils импорт в категорию» на «из tensorflow.keras.utils импорт в категорию». Примените это изменение ко всему импорту keras в tensorflow.keras

3. Я рекомендую вам переустановить keras, так или иначе в вашей установке keras отсутствуют файлы, это распространенная проблема в Anaconda.

Ответ №1:

Керас теперь полностью интегрирован в Tensorflow. Таким образом, импорт только Keras вызывает ошибку.

Он должен быть импортирован как:

 from tensorflow.keras.utils import to_categorical
 

Избегайте импорта в качестве:

 from keras.utils import to_categorical
 

Он безопасен в использовании
from tensorflow.keras. вместо from keras. того, чтобы импортировать все необходимые модули.

 from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D,Dropout
from tensorflow.keras.layers import Dense, Activation, Flatten
from tensorflow.keras.utils import to_categorical
from tensorflow.keras import backend as K 
from sklearn.model_selection import train_test_split
from tensorflow.keras import callbacks
 

Комментарии:

1. Это сработало и для меня тоже, после довольно небольшого исследования, так как Керас теперь перешел на TensorFlow, поставив tensorflow. или tf. необходимо 🙂

Ответ №2:

Во-первых, вы можете установить это keras.utils с помощью

 $!pip install keras.utils 
 

или другой простой метод просто импортируйте to_categorical модуль как

 $ tensorflow.keras.utils import to_categorical
 

потому что keras поставляется в пакете tensorflow

Ответ №3:

В качестве альтернативы вы можете использовать:

from keras.utils.np_utils import to_categorical

Пожалуйста, обратите внимание на np_utils после keras.uitls