#python #tensorflow #keras #deep-learning #gpu
Вопрос:
У меня есть две модели, которые мне нужно загрузить и использовать в сценарии для прогнозирования. Я уже читал, что для загрузки и прогнозирования нескольких моделей при использовании одного графического процессора необходимо использовать сеансы.
Я попробовал этот пример, но он не работает. В примере автор загружает модель из json и затем загружает веса, я всегда просто загружал модель, а затем использовал predict()
функцию, но я получаю эту ошибку:
tensorflow.python.framework.errors_impl.InvalidArgumentError: Node 'training/Adam/gradients/dropout_5/cond_grad/StatelessIf': Connecting to invalid output 1 of source node dropout_5/cond which has 1 outputs. Try using tf.compat.v1.experimental.output_all_intermediates(True).
До сих пор это мой код:
graph1 = Graph()
with graph1.as_default():
session1 = Session()
with session1.as_default():
scratch_model = load_model("C:\Users\but\PycharmProjects\OpticalDieInspection\ScratchModel.h5")
graph2 = Graph()
with graph2.as_default():
session2 = Session()
with session2.as_default():
broken_edge_model = load_model("C:\Users\but\PycharmProjects\OpticalDieInspection\brokenEdgeModel.h5")
with self.graph1.as_default():
with self.session1.as_default():
output_scratch = scratch_model.predict(scratch_input_image)
with self.graph2.as_default():
with self.session2.as_default():
output_broken_edge = broken_edge_model.predict(broken_edge_input_image)
#scratch_model = load_model("C:\Users\but\PycharmProjects\OpticalDieInspection\ScratchModel.h5")
#output_scratch = scratch_model.predict(scratch_input_image)
#be.clear_session()
#broken_edge_model = load_model("C:\Users\but\PycharmProjects\OpticalDieInspection\brokenEdgeModel.h5")
#output_broken_edge = broken_edge_model.predict(broken_edge_input_image)
if output_scratch[0][0] > output_scratch[0][1]:
#print(output_scratch[0][0], "Scratch")
part_state_scratch = "NOK"
else:
#print(output_scratch[0][1], 'OK')
part_state_scratch = "OK"
if output_broken_edge[0][0] > output_broken_edge[0][1]:
#print(output_broken_edge[0][0], "BrokenEdge")
part_state_broken_edge = "NOK"
else:
#print(output_broken_edge[0][1], 'OK')
part_state_broken_edge = "OK"
if part_state_scratch == "OK" and part_state_broken_edge == "OK":
ok_dest = os.path.join(ok_dir, os.path.basename(image_files[i]))
copyfile(image_files[i], ok_dest)
good_parts_cnt = 1
elif part_state_scratch == "NOK" and part_state_broken_edge == "OK":
nok_dest = os.path.join(scratch_dir, os.path.basename(image_files[i]))
copyfile(image_files[i], nok_dest)
bad_parts_cnt = 1
elif part_state_scratch == "OK" and part_state_broken_edge == "NOK":
nok_dest = os.path.join(broken_edge_dir, os.path.basename(image_files[i]))
copyfile(image_files[i], nok_dest)
bad_parts_cnt = 1
else:
nok_dest = os.path.join(broken_edge_dir, os.path.basename(image_files[i]))
copyfile(image_files[i], nok_dest)
nok_dest = os.path.join(scratch_dir, os.path.basename(image_files[i]))
copyfile(image_files[i], nok_dest)
bad_parts_cnt = 1