Я разрабатываю проект по сравнению двух человеческих лиц, и для этого я использую 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, но безрезультатно.
Пожалуйста, предоставьте мне решение для этого.