Моя видеокарта — GT750M, а среда — профессиональная версия win10 с официального сайта школы.
Яма 1: Конфликт между разными версиями Python
Я только начал использовать python3.7 и обнаружил, что версии python3 и 7 не поддерживают версии до tensorflow
Яма 2: ограничение вычислительной мощности графического процессора
В итоге никакой ошибки не было, я пробежался, выпил воды и с удивлением обнаружил, почему я не передвинул место, одна эпоха бежала так долго, я посмотрел на устройство, ага, процессор занимает 100%, gpu занимает 0, это не международная шутка, хорошо. Почему tensoflow-gpu использует cpu вместо gpu?
Затем выполните следующую команду для проверки:
from tensorflow.python.client import device_lib
print("-"*50)
print(device_lib.list_local_devices())
print("-"*50)
Я обнаружил, что в моем доступном устройстве есть только один процессор, а минимальная вычислительная мощность, необходимая для tensorflow 1.11.0, составляет 3,7, а моя вычислительная мощность GT750M не равна 3,0, поэтому я автоматически игнорирую свою видеокарту и напрямую использую процессор для вычислений. , ну я был Пакетом к презрению.
Что делать, решительно удалить tensorflow 1.11.0 и установить tensorflow 1.9.0, Это не должно быть проблемой.
Яма 3: keras.backend.clear_session
В случае загрузки нескольких моделей вы должны использовать эту команду, которая может сообщать о различных ошибках:
ValueError: Tensor Tensor("Placeholder:0", shape=(3, 3, 1, 32), dtype=float32) is not an element of this graph.
И так далее, затем после использования команды clear_session вы найдете shape=() выше, обратите внимание, что круглые скобки пусты.
Это делает модель уникальной:
То есть метод predict() можно вызывать сразу после load_model(), но в следующий раз, когда вам нужно будет снова предсказать, вам придется перезагрузить_модель, верно?
ключевой моментв:
- clear_session() должен выполняться до инициализации графа. Очевидно, вы только что закончили инициализацию, и вы просто очистили график, как и никакой инициализации.
graph=tf.Graph().as_default()
K.clear_session()
- Каждая модель имеет свой собственный график, и использование графика по умолчанию вызовет путаницу. Потому что настройка кераса такова, что в работе только один график по умолчанию, поэтому есть
with graph.as_default():
blablabla()...
Такой способ написания он означает, что граф загружается в текущий контекст. Итак, для обеспечения корректности написано так:
K.clear_session()
graph = tf.Graph()
with graph.as_default():
sess = tf.Session(graph=graph) #把识别需要的数据放在自己创建的Graph和Session中,避免使用默认Graph,造成数据错误
with sess.as_default():
model = YOLO(**vars(Args(model_path,classes_path)))
print("model loaded\n","-"*100)