Тензор Тензор(«сгладить/изменить форму:0», форма=(?, 2622), dtype=float32) не является элементом этого графика

#tensorflow #deep-learning #conv-neural-network #keras-vggface

Вопрос:

Привет, команда StackOverflow: Я построил модель на основе (Vgg_Face_Model) с загруженными весами (vgg_face_weights.h5). Обратите внимание , что я использую tensorflow-gpu = 2.1.0 и keras=2.3.1 , с Anaconda 3 создаю его как интерпретатор и использую с pycharm, но код показывает ошибку в части :

  input_descriptor = [model.predict(face), img]
 

Код таков:

 def face_recognizer(face, db_descriptors):
            # face = cv2.imread(img)
            # face = cv2.resize(face, (IMG_Size, IMG_Size))
            t0 = time.perf_counter()
            face = np.array(face).reshape(-1, IMG_Size, IMG_Size, 3)

            ###### here error #################################
            input_descriptor = [model.predict(face), img]
            ###################################################

            K_nn_result = K_nn_Classifier(input_descriptor[0], db_descriptors, 5)
            input_result = Knn_Distance_Score(K_nn_result)
            if input_result[0] <= 10:
                identity = 'stranger'
            else:
                identity = input_result[1]
            # print('Done in',time.perf_counter()-t0)
            return input_result, identity

    def PrepareModels(self):
        global  mpFaceDetection, FaceDetector, model
        mpFaceDetection = mp.solutions.face_detection
        FaceDetector = mpFaceDetection.FaceDetection()
        model = loadModel()

 

Модель является:

 import os
from pathlib import Path
# from tensorflow.keras.models import Model, Sequential

from tensorflow.keras.models import Model, Sequential, load_model
from tensorflow.keras.layers import Input, Convolution2D, ZeroPadding2D, MaxPooling2D, Flatten, Dense, Dropout, 
    Activation
import gdown


# ---------------------------------------

def Vgg_Face_Model():
    model = Sequential()
    model.add(ZeroPadding2D((1, 1), input_shape=(224, 224, 3)))
    model.add(Convolution2D(64, (3, 3), activation='relu'))
    model.add(ZeroPadding2D((1, 1)))
    model.add(Convolution2D(64, (3, 3), activation='relu'))
    model.add(MaxPooling2D((2, 2), strides=(2, 2)))

    model.add(ZeroPadding2D((1, 1)))
    model.add(Convolution2D(128, (3, 3), activation='relu'))
    model.add(ZeroPadding2D((1, 1)))
    model.add(Convolution2D(128, (3, 3), activation='relu'))
    model.add(MaxPooling2D((2, 2), strides=(2, 2)))

    model.add(ZeroPadding2D((1, 1)))
    model.add(Convolution2D(256, (3, 3), activation='relu'))
    model.add(ZeroPadding2D((1, 1)))
    model.add(Convolution2D(256, (3, 3), activation='relu'))
    model.add(ZeroPadding2D((1, 1)))
    model.add(Convolution2D(256, (3, 3), activation='relu'))
    model.add(MaxPooling2D((2, 2), strides=(2, 2)))

    model.add(ZeroPadding2D((1, 1)))
    model.add(Convolution2D(512, (3, 3), activation='relu'))
    model.add(ZeroPadding2D((1, 1)))
    model.add(Convolution2D(512, (3, 3), activation='relu'))
    model.add(ZeroPadding2D((1, 1)))
    model.add(Convolution2D(512, (3, 3), activation='relu'))
    model.add(MaxPooling2D((2, 2), strides=(2, 2)))

    model.add(ZeroPadding2D((1, 1)))
    model.add(Convolution2D(512, (3, 3), activation='relu'))
    model.add(ZeroPadding2D((1, 1)))
    model.add(Convolution2D(512, (3, 3), activation='relu'))
    model.add(ZeroPadding2D((1, 1)))
    model.add(Convolution2D(512, (3, 3), activation='relu'))
    model.add(MaxPooling2D((2, 2), strides=(2, 2)))

    model.add(Convolution2D(4096, (7, 7), activation='relu'))
    model.add(Dropout(0.5))
    model.add(Convolution2D(4096, (1, 1), activation='relu'))
    model.add(Dropout(0.5))
    model.add(Convolution2D(2622, (1, 1)))
    model.add(Flatten())
    model.add(Activation('softmax'))

    return model


def loadModel():
    model = Vgg_Face_Model()

    # -----------------------------------

    home = str(Path.home())

    if os.path.isfile(home   '/.deepface/weights/vgg_face_weights.h5') != True:
        print("vgg_face_weights.h5 will be downloaded...")

        url = 'https://drive.google.com/uc?id=1CPSeum3HpopfomUEK1gybeuIVoeJT_Eo'
        output = home   '/.deepface/weights/vgg_face_weights.h5'
        gdown.download(url, output, quiet=False)

    # -----------------------------------

    model.load_weights(home   '/.deepface/weights/vgg_face_weights.h5')

    # -----------------------------------

    # TO-DO: why?
    vgg_model_descriptor = Model(inputs=model.layers[0].input, outputs=model.layers[-2].output)

    return vgg_model_descriptor


# model = loadModel()

 

выход:

 Tensor Tensor("flatten/Reshape:0", shape=(?, 2622), dtype=float32) is not an element of this graph.'
 

Ответ №1:

 from tensorflow.python.keras.backend import set_session
sess = tf.Session()

#This is a global session and graph
graph = tf.get_default_graph()
set_session(sess)


#now where you are calling the model
global sess
global graph
with graph.as_default():
    set_session(sess)
    input_descriptor = [model.predict(face), img]
 

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

1. спасибо , Акаш, это работает . но становится медленнее на 7 Мбит / с при 114 мбит / с. Примечание : я использовал графический процессор . почему?

2. вы уверены, что этот процесс использует графический процессор?