шаги тензорного потока на яме

TensorFlow

Моя видеокарта — 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)