Получение "ValueError" в AWS, но не на локальном сервере в проекте подобия изображений с использованием tensorflow == 1.14 & keras == 2.2.5 - PullRequest
0 голосов
/ 25 мая 2020

Я разрабатываю проект по сравнению двух человеческих лиц, и для этого я использую tenorflow (1.14), keras (2.2.5), inception_blocks_v2.faceRecoModel (https://github.com/JudasDie/deeplearning.ai/blob/master/Convolutional%20Neural%20Networks/week4/FaceNet/inception_blocks_v2.py)

Мой фрагмент кода для этого:

            print("(a) Loading Face Recognition Model ...")
            FRmodel = inception_blocks_v2.faceRecoModel(input_shape=(3, 96, 96))

            print("(b) Compiling Face Recognition Model ...")
            FRmodel.compile(optimizer='adam', loss=triplet_loss, metrics=['accuracy'])

            print("(c) Loading Weights for Face Recognition Model ...")
            load_weights_from_FaceNet(FRmodel)

После этого я пытаюсь загрузить веса с помощью следующей функции

def load_weights_from_FaceNet(FRmodel):
    # Load weights from csv files (which was exported from Openface torch model)
    weights = WEIGHTS # It is list of weights. Difficult to type here. Please refer this--> https://github.com/Skuldur/facenet-face-recognition/blob/master/fr_utils.py

    weights_dict = load_weights()

    # Set layer weights of the model
    for name in weights:
        if FRmodel.get_layer(name) != None:
            FRmodel.get_layer(name).set_weights(weights_dict[name])
        elif model.get_layer(name) != None:
            model.get_layer(name).set_weights(weights_dict[name])

def load_weights():
    # Set weights path
    dirPath = './weights'
    fileNames = filter(lambda f: not f.startswith('.'), os.listdir(dirPath))
    paths = {}
    weights_dict = {}



 for n in fileNames:
        paths[n.replace('.csv', '')] = dirPath + '/' + n

 for name in WEIGHTS:
    if 'conv' in name:
        conv_w = genfromtxt(paths[name + '_w'], delimiter=',', dtype=None)
        conv_w = np.reshape(conv_w, conv_shape[name])
        conv_w = np.transpose(conv_w, (2, 3, 1, 0))
        conv_b = genfromtxt(paths[name + '_b'], delimiter=',', dtype=None)
        weights_dict[name] = [conv_w, conv_b]     
    elif 'bn' in name:
        bn_w = genfromtxt(paths[name + '_w'], delimiter=',', dtype=None)
        bn_b = genfromtxt(paths[name + '_b'], delimiter=',', dtype=None)
        bn_m = genfromtxt(paths[name + '_m'], delimiter=',', dtype=None)
        bn_v = genfromtxt(paths[name + '_v'], delimiter=',', dtype=None)
        weights_dict[name] = [bn_w, bn_b, bn_m, bn_v]
    elif 'dense' in name:
        dense_w = genfromtxt(dirPath+'/dense_w.csv', delimiter=',', dtype=None)
        dense_w = np.reshape(dense_w, (128, 736))
        dense_w = np.transpose(dense_w, (1, 0))
        dense_b = genfromtxt(dirPath+'/dense_b.csv', delimiter=',', dtype=None)
        weights_dict[name] = [dense_w, dense_b]

return weights_dict

При попытке запустить я получаю нет проблем на локальном сервере, но когда я запускаю тот же проект на AWS EC2 с флэш-API, я получаю ValueError. Меня озадачило, когда 1-е обращение к API (развернутое ec2) дает мне идеальный ответ, но 2-е и последующие обращения дают мне ошибки. Ошибка:

ValueError: Fetch argument <tf.Variable 'conv1/kernel:0' shape=(7, 7, 3, 64) dtype=float32_ref> cannot be interpreted as a Tensor. (Tensor Tensor("conv1/kernel:0", shape=(7, 7, 3, 64), dtype=float32_ref) is not an element of this graph.)

Я попытался исправить, прочитав: https://github.com/tensorflow/tensorflow/issues/14356, но безрезультатно.

Пожалуйста, предоставьте мне решение для этого.

...