В Tensorflow / Keras при запуске кода из https://github.com/pierluigiferrari/ssd_keras используйте оценщик: ssd300_evaluation. Я получил эту ошибку.
Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
Это очень похоже на нерешенный вопрос: Ошибка Google Colab: не удалось получить алгоритм свертки. Вероятно, это связано с тем, что cuDNN не удалось инициализировать
С проблемой, с которой я столкнулся:
питон: 3.6.4.
Версия Tensorflow: 1.12.0.
Керас Версия: 2.2.4.
CUDA: V10.0.
cuDNN: V7.4.1.5.
NVIDIA GeForce GTX 1080.
Также я побежал:
import tensorflow as tf
with tf.device('/gpu:0'):
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
with tf.Session() as sess:
print (sess.run(c))
Без ошибок или проблем.
Минималистичный пример:
from keras import backend as K
from keras.models import load_model
from keras.optimizers import Adam
from scipy.misc import imread
import numpy as np
from matplotlib import pyplot as plt
from models.keras_ssd300 import ssd_300
from keras_loss_function.keras_ssd_loss import SSDLoss
from keras_layers.keras_layer_AnchorBoxes import AnchorBoxes
from keras_layers.keras_layer_DecodeDetections import DecodeDetections
from keras_layers.keras_layer_DecodeDetectionsFast import DecodeDetectionsFast
from keras_layers.keras_layer_L2Normalization import L2Normalization
from data_generator.object_detection_2d_data_generator import DataGenerator
from eval_utils.average_precision_evaluator import Evaluator
import tensorflow as tf
%matplotlib inline
import keras
keras.__version__
# Set a few configuration parameters.
img_height = 300
img_width = 300
n_classes = 20
model_mode = 'inference'
K.clear_session() # Clear previous models from memory.
model = ssd_300(image_size=(img_height, img_width, 3),
n_classes=n_classes,
mode=model_mode,
l2_regularization=0.0005,
scales=[0.1, 0.2, 0.37, 0.54, 0.71, 0.88, 1.05], # The scales
for MS COCO [0.07, 0.15, 0.33, 0.51, 0.69, 0.87, 1.05]
aspect_ratios_per_layer=[[1.0, 2.0, 0.5],
[1.0, 2.0, 0.5, 3.0, 1.0/3.0],
[1.0, 2.0, 0.5, 3.0, 1.0/3.0],
[1.0, 2.0, 0.5, 3.0, 1.0/3.0],
[1.0, 2.0, 0.5],
[1.0, 2.0, 0.5]],
two_boxes_for_ar1=True,
steps=[8, 16, 32, 64, 100, 300],
offsets=[0.5, 0.5, 0.5, 0.5, 0.5, 0.5],
clip_boxes=False,
variances=[0.1, 0.1, 0.2, 0.2],
normalize_coords=True,
subtract_mean=[123, 117, 104],
swap_channels=[2, 1, 0],
confidence_thresh=0.01,
iou_threshold=0.45,
top_k=200,
nms_max_output_size=400)
# 2: Load the trained weights into the model.
# TODO: Set the path of the trained weights.
weights_path = 'C:/Users/USAgData/TF SSD
Keras/weights/VGG_VOC0712Plus_SSD_300x300_iter_240000.h5'
model.load_weights(weights_path, by_name=True)
# 3: Compile the model so that Keras won't complain the next time you load it.
adam = Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)
ssd_loss = SSDLoss(neg_pos_ratio=3, alpha=1.0)
model.compile(optimizer=adam, loss=ssd_loss.compute_loss)
dataset = DataGenerator()
# TODO: Set the paths to the dataset here.
dir= "C:/Users/USAgData/TF SSD Keras/VOC/VOCtest_06-Nov-2007/VOCdevkit/VOC2007/"
Pascal_VOC_dataset_images_dir = dir+ 'JPEGImages'
Pascal_VOC_dataset_annotations_dir = dir + 'Annotations/'
Pascal_VOC_dataset_image_set_filename = dir+'ImageSets/Main/test.txt'
# The XML parser needs to now what object class names to look for and in which order to map them to integers.
classes = ['background',
'aeroplane', 'bicycle', 'bird', 'boat',
'bottle', 'bus', 'car', 'cat',
'chair', 'cow', 'diningtable', 'dog',
'horse', 'motorbike', 'person', 'pottedplant',
'sheep', 'sofa', 'train', 'tvmonitor']
dataset.parse_xml(images_dirs=[Pascal_VOC_dataset_images_dir],
image_set_filenames=[Pascal_VOC_dataset_image_set_filename],
annotations_dirs=[Pascal_VOC_dataset_annotations_dir],
classes=classes,
include_classes='all',
exclude_truncated=False,
exclude_difficult=False,
ret=False)
evaluator = Evaluator(model=model,
n_classes=n_classes,
data_generator=dataset,
model_mode=model_mode)
results = evaluator(img_height=img_height,
img_width=img_width,
batch_size=8,
data_generator_mode='resize',
round_confidences=False,
matching_iou_threshold=0.5,
border_pixels='include',
sorting_algorithm='quicksort',
average_precision_mode='sample',
num_recall_points=11,
ignore_neutral_boxes=True,
return_precisions=True,
return_recalls=True,
return_average_precisions=True,
verbose=True)






У меня была эта ошибка, и я исправил ее, удалив все версии CUDA и cuDNN из моей системы. Затем я установил Набор инструментов CUDA 9.0 (без всяких патчей) и cuDNN v7.4.1 для CUDA 9.0.
Вы также можете понизить версию TensorFlow
Та же ошибка, что и у меня.Причина получения этой ошибки связана с несоответствием версии cudaa / cudnn с вашей версией tensorflow, есть два способа решить эту проблему: Либо вы понижаете версию своей версии Tensorflow, устанавливая пип-пакет --upgrade tensorflowgpu == 1.8.0 Или вы можете выполнить шаги, указанные в tenorflow.org/install/gpu. Совет: выберите свою версию Ubuntu и следуйте инструкциям. :-)
Для меня это было несоответствие между CUDA и cuDNN. Замена библиотек cuDNN на соответствующую версию решила проблему.
Это не настоящее решение, оно просто каким-то образом сработало, вы посмотрите на stackoverflow.com/questions/53698035/… для фактического решения.
Как я могу скачать cudatookkit 9.0 для Windows 10?
Проблема заключается в несовместимости более новых версий tensorflow 1.10.x plus с версиями cudnn 7.0.5 и cuda 9.0. Самое простое решение - понизить тензорный поток до 1.8.0
pip install --upgrade tensorflow-gpu == 1.8.0
Я видел это сообщение об ошибке по трем разным причинам и с разными решениями:
Я регулярно работаю над этой ошибкой, завершая свой процесс python, удаляя каталог ~/.nv (в linux, rm -rf ~/.nv) и перезапуская процесс Python. Я точно не знаю, почему это работает. Вероятно, это частично связано со вторым вариантом:
Ошибка также может появиться, если у вас закончилась оперативная память видеокарты. С помощью графического процессора nvidia вы можете проверить использование памяти видеокарты с помощью nvidia-smi. Это даст вам представление о том, сколько ОЗУ графического процессора у вас используется (что-то вроде 6025MiB / 6086MiB, если вы почти на пределе), а также список того, какие процессы используют ОЗУ графического процессора.
Если у вас закончилась оперативная память, вам необходимо перезапустить процесс (который должен освободить оперативную память), а затем использовать менее интенсивный подход к памяти. Вот несколько вариантов:
import keras
import tensorflow as tf
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.9 # 0.6 sometimes works better for folks
keras.backend.tensorflow_backend.set_session(tf.Session(config=config))
Это может замедлить оценку вашей модели, если не используется вместе с перечисленными выше элементами, предположительно из-за того, что придется менять местами большой набор данных, чтобы он поместился в небольшой объем выделенной вами памяти.
Второй вариант - запустить TensorFlow с минимальным объемом памяти, а затем выделить больше по мере необходимости (задокументировано здесь):
os.environ['TF_FORCE_GPU_ALLOW_GROWTH'] = 'true'
Если у вас никогда не работали аналогичные модели, у вас не заканчивается VRAM и, ваш кеш чист, я бы вернулся и настроил CUDA + TensorFlow, используя лучшее из доступных руководств по установке - я добился наибольшего успеха, следуя инструкции на https://www.tensorflow.org/install/gpu, а не на сайте NVIDIA / CUDA. Лямбда-стек - тоже хороший вариант.
Я поддерживаю этот ответ, так как для меня не хватило только памяти.
В моем случае это были несовместимые версии. Инструкции tenorflow.org/install/gpu верны, если вы обратите пристальное внимание на такие операторы, как = или> =. Первоначально я предполагал «равный или новее», но с TensorFlow 2.2 (по-видимому, нужно рассматривать как 2.1) вам нужны точно CUDA 10.1 и> = CuDNN 7.6, которые совместимы с CUDA 10.1 (в настоящее время это только 7.6.5 - и есть два разные для CUDA 10.2 и 10.1.
Это было воспоминанием и для меня. Спасибо за подробное объяснение.
В моем случае это нехватка памяти. И ваш код для версии 0.6 работал у меня [per_process_gpu_memory_fraction = 0.6]. Спасибо
Я все время терял память. Фоновый процесс занимал всю мою память графического процессора. Перекрестно проверил идентификаторы процессов с htop и nvidia-smi
Целую неделю боролся с этой проблемой. Причина была очень глупой: я использовал фотографии в высоком разрешении для тренировок.
Надеюсь, это сэкономит чье-то время :)
Проблема также может возникнуть, если есть несовместимая версия cuDNN, что может иметь место, если вы установили Tensorflow с conda, поскольку conda также устанавливает CUDA и cuDNN при установке Tensorflow.
Решение состоит в том, чтобы установить Tensorflow с помощью pip и установить CUDA и cuDNN отдельно без conda, например. если у вас CUDA 10.0.130 и cuDNN 7.4.1 (протестированные конфигурации), то
pip install tensorflow-gpu==1.13.1
1) закройте все остальные ноутбуки, использующие GPU
2) TF 2.0 требует cuDNN SDK (> = 7.4.1)
извлеките и добавьте путь к папке 'bin' в "переменные среды / системные переменные / путь": "D: \ Programs \ x64 \ Nvidia \ cudnn \ bin"
У меня возникла эта проблема после обновления до TF2.0. Следующее начало выдавать ошибку:
outputs = tf.nn.conv2d(images, filters, strides=1, padding = "SAME")
Я использую Ubuntu 16.04.6 LTS (виртуальная машина данных Azure) и TensorFlow 2.0. Обновлен в соответствии с инструкциями по этой инструкции TensorFlow GPU страница. Это решило проблему для меня. Между прочим, это куча обновлений / установок apt-get, и я выполнил их все.
Я сделал то же самое для Ubuntu 18.04, и теперь все работает нормально. Но теперь, когда я запускаю nvidia-smi в терминале, он показывает CUDA 10.2. Но здесь говорит, что Tensorflow 2.0 совместим с CUDA 10.0. Я не понимаю, как все работает? Вывод which nvcc в терминале дает /usr/local/cuda-10.0/bin/nvcc
Итак, я думаю, что есть 2 независимых CUDA, один для драйвера nvidia, а другой для базовой среды.
Думаю, должно быть. Я не обратил внимания на отображаемую версию CUDA. Мое окружение изменилось, и теперь я больше не мог проверять. Интересная информация. Спасибо.
Keras включен в состав TensorFlow 2.0 выше. Так
import keras иfrom keras.module.module import class на ->
from tensorflow.keras.module.module import classimport tensorflow as tf
from tensorflow.compat.v1.keras.backend import set_session
config = tf.compat.v1.ConfigProto()
config.gpu_options.allow_growth = True # dynamically grow the memory used on the GPU
config.log_device_placement = True # to log device placement (on which device the operation ran)
sess = tf.compat.v1.Session(config=config)
set_session(sess)
Спасибо за прекрасный ответ! Это мне очень помогает.
Как уже заметил выше Анураг Бхалкар, это можно исправить с помощью грязного обходного пути, настроив и запустив модель в вашем коде перед загрузкой старой модели с load_model () из keras. Это правильно инициализирует cuDNN, который, кажется, затем можно использовать для load_model ().
В моем случае я использую Spyder IDE для запуска всех своих скриптов на Python. В частности, я настраиваю, обучаю и сохраняю CNN в одном скрипте. После этого другой скрипт загружает сохраненную модель для визуализации. Если я открываю Spyder и напрямую запускаю скрипт визуализации для загрузки старой сохраненной модели, я получаю ту же ошибку, что и упоминалось выше. Я все еще мог загрузить модель и изменить ее, но когда я попытался создать прогноз, я получил ошибку.
Однако если я сначала запустил свой обучающий сценарий в экземпляре Spyder, а затем запустил сценарий визуализации в том же экземпляре Sypder, он будет работать нормально без каких-либо ошибок:
#training a model correctly initializes cuDNN
model=Sequential()
model.add(Conv2D(32,...))
model.add(Dense(num_classes,...))
model.compile(...)
model.fit() #this all works fine
Затем следующий код, включая load_model (), работает нормально:
#this script relies on cuDNN already being initialized by the script above
from keras.models import load_model
model = load_model(modelPath) #works
model = Model(inputs=model.inputs, outputs=model.layers[1].output) #works
feature_maps = model.predict(img) #produces the error only if the first piece of code is not run
Я не мог понять, почему это так или как решить проблему по-другому, но для меня обучение небольшой рабочей модели keras перед использованием load_model () - это быстрое и грязное исправление, которое не требует переустановки cuDNN или иного .
Та же ошибка, что и у меня. Причина получения этой ошибки связана с несоответствием версии cudaa / cudnn вашей версии tenorflow, есть два метода решения этой проблемы:
Либо вы понижаете версию Tensorflow
pip install --upgrade tensorflowgpu==1.8.0
Или вы можете выполнить действия, указанные в Здесь.
Совет: выберите свою версию ubuntu и следуйте инструкциям. :-)
У меня была такая же проблема, но с более простым решением, чем у других, опубликованных здесь. У меня установлены как CUDA 10.0, так и 10.2, но у меня был только cuDNN для 10.2, и эта версия [на момент публикации] несовместима с TensorFlow GPU. Я только что установил cuDNN для CUDA 10.0, и теперь все работает нормально!
Обходной путь: Свежая установка TF 2.0 и запуск простого учебника Minst, все прошло нормально, открыл другой блокнот, попытался запустить и столкнулся с этой проблемой. Я существовал все записные книжки и перезапустил Jupyter и открыл только один ноутбук, успешно запустил его. Проблема связана либо с памятью, либо с запуском нескольких ноутбуков на графическом процессоре.
Спасибо
Некоторое время я боролся с этим, работая над экземпляром AWS Ubuntu.
Затем я нашел решение, которое в данном случае оказалось довольно простым.
Не устанавливайте tenorflow-gpu с помощью pip (pip install tensorflow-gpu), а с conda (conda install tensorflow-gpu), чтобы он находился в среде conda и устанавливал cudatoolkit и cudnn в правильной среде.
Это сработало для меня, спасло мне день и надеюсь, что это поможет кому-то другому.
См. Исходное решение здесь от LearnermaxRL:
https://github.com/tensorflow/tensorflow/issues/24828#issuecomment-453727142
У меня была такая же проблема, я решил ее благодаря этому:
os.environ['TF_FORCE_GPU_ALLOW_GROWTH'] = 'true'
или
physical_devices = tf.config.experimental.list_physical_devices('GPU')
if len(physical_devices) > 0:
tf.config.experimental.set_memory_growth(physical_devices[0], True)
1-е решение решило это как по волшебству. Таким образом, вероятно, не решен источник проблемы.
На данный момент это кажется очень распространенной проблемой, я нашел похожие решения на GitHub и Medium. У меня тоже сработало, так что, по-видимому, проблема с текущими версиями TF или CuDNN, а не с неправильными установками. Это была проблема со слоями CNN, независимо от их размера. Другие операции / слои в порядке.
1-е решение отлично подходит для меня.
Спасибо! это решение сработало и для меня. Я просто использовал рецепт ответа, получившего наибольшее количество голосов (за исключением переустановки), но это не сработало. Думаю, было бы отличной идеей создать рецепт из всех мер, описанных в этой ветке, чтобы закрепить его.
У меня такая же проблема с вами, и моя конфигурация - tenorflow1.13.1, cuda10.0, cudnn7.6.4. Я пытаюсь сменить версию cudnn на 7.4.2 повезло, я решил проблему.
Просто добавь
from tensorflow.compat.v1 import ConfigProto
from tensorflow.compat.v1 import InteractiveSession
config = ConfigProto()
config.gpu_options.allow_growth = True
session = InteractiveSession(config=config)
добавить from tensorflow.compat.v1 import ConfigProto
Это продолжение пункта 2 https://stackoverflow.com/a/56511889/2037998.
Я использовал следующий код, чтобы ограничить использование ОЗУ графического процессора:
import tensorflow as tf
gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
# Restrict TensorFlow to only allocate 1*X GB of memory on the first GPU
try:
tf.config.experimental.set_virtual_device_configuration(
gpus[0],
[tf.config.experimental.VirtualDeviceConfiguration(memory_limit=(1024*4))])
logical_gpus = tf.config.experimental.list_logical_devices('GPU')
print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
except RuntimeError as e:
# Virtual devices must be set before GPUs have been initialized
print(e)
Этот пример кода взят из: TensorFlow: использование графического процессора: ограничение роста памяти графического процессора Поместите этот код перед любым другим кодом TF / Keras, который вы используете.
Примечание. Приложение может использовать немного больше ОЗУ графического процессора, чем указано выше.
Примечание 2: если в системе также работают другие приложения (например, пользовательский интерфейс), эти программы также могут потреблять некоторое количество ОЗУ графического процессора. (Xorg, Firefox, ... иногда до 1 ГБ ОЗУ графического процессора вместе)
Включение увеличения памяти на GPU в начале моего кода решило проблему:
import tensorflow as tf
physical_devices = tf.config.experimental.list_physical_devices('GPU')
print("Num GPUs Available: ", len(physical_devices))
tf.config.experimental.set_memory_growth(physical_devices[0], True)
Num GPUs Available: 1
при запуске записной книжки или кода добавьте следующие строки кода
import tensorflow as tf
physical_devices = tf.config.experimental.list_physical_devices('GPU')
tf.config.experimental.set_memory_growth(physical_devices[0], True)
У меня была аналогичная проблема. Tensorflow жаловался, что ожидает определенную версию cuDNN, но не ту, которую нашел. Итак, я скачал ожидаемую версию от https://developer.nvidia.com/rdp/cudnn-archive и установил ее. Теперь это работает.
У меня была такая же проблема с RTX 2080. Затем у меня сработал следующий код.
from tensorflow.compat.v1 import ConfigProto
from tensorflow.compat.v1 import InteractiveSession
config = ConfigProto()
config.gpu_options.allow_growth = True
session = InteractiveSession(config=config)
У меня такая же проблема. Я использую среду conda, поэтому мои пакеты автоматически управляются conda. Я решил проблему, ограничив выделение памяти для tenorflow v2, python 3.x
physical_devices = tf.config.experimental.list_physical_devices(‘GPU’)
tf.config.experimental.set_memory_growth(physical_devices[0], True)
Это решило мою проблему. Однако это очень сильно ограничивает память. Когда я одновременно запускаю
nvidia-smi
Увидел, что это около 700мб. Итак, чтобы увидеть больше вариантов, можно проверить коды в сайт tenorflow
gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
# Restrict TensorFlow to only allocate 1GB of memory on the first GPU
try:
tf.config.experimental.set_virtual_device_configuration(
gpus[0],
[tf.config.experimental.VirtualDeviceConfiguration(memory_limit=1024)])
logical_gpus = tf.config.experimental.list_logical_devices('GPU')
print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
except RuntimeError as e:
# Virtual devices must be set before GPUs have been initialized
print(e)
В моем случае приведенный выше фрагмент кода отлично решил проблему.
Примечание: я не пробовал устанавливать tenorflow с помощью pip, это эффективно работало с установленным tenorflow conda.
Ubuntu: 18.04
питон: 3.8.5
тензорный поток: 2.2.0
cudnn: 7.6.5
cudatoolkit: 10.1.243
Столкнулся с той же проблемой, я думаю, что графический процессор не может загрузить все данные сразу. Я решил это, уменьшив размер партии.
У меня также была такая же проблема с Tensorflow 2.4 и Cuda 11.0 с CuDNN v 8.0.4. На решение этой проблемы я потратил почти 2-3 дня. Проблема была просто в несовпадении драйверов. Я устанавливал Cuda 11.0 Update 1, я думал, что это обновление 1, поэтому может работать хорошо, но это было виновником. Я удалил Cuda 11.0 Update 1 и установил его без обновления. Вот список драйверов, которые работали для TensorFlow 2.4 на графическом процессоре RTX 2060 6GB.
Список необходимых аппаратных и программных требований указан здесь
Я тоже должен был сделать это
import tensorflow as tf
physical_devices = tf.config.list_physical_devices('GPU')
tf.config.experimental.set_memory_growth(physical_devices[0], True)
чтобы избежать этой ошибки
2020-12-23 21:54:14.971709: I tensorflow/stream_executor/stream.cc:1404] [stream=000001E69C1DA210,impl=000001E6A9F88E20] did not wait for [stream=000001E69C1DA180,impl=000001E6A9F88730]
2020-12-23 21:54:15.211338: F tensorflow/core/common_runtime/gpu/gpu_util.cc:340] CPU->GPU Memcpy failed
[I 21:54:16.071 NotebookApp] KernelRestarter: restarting kernel (1/5), keep random ports
kernel 8b907ea5-33f1-4b2a-96cc-4a7a4c885d74 restarted
kernel 8b907ea5-33f1-4b2a-96cc-4a7a4c885d74 restarted
Вот некоторые из примеров ошибок, которые я получал.
Тип 1
UnpicklingError: invalid load key, 'H'.
During handling of the above exception, another exception occurred:
ValueError Traceback (most recent call last)
<ipython-input-2-f049ceaad66a> in <module>
Тип 2
InternalError: Blas GEMM launch failed : a.shape=(15, 768), b.shape=(768, 768), m=15, n=768, k=768 [Op:MatMul]
During handling of the above exception, another exception occurred:
Тип 3
failed to create cublas handle: CUBLAS_STATUS_ALLOC_FAILED
2020-12-23 21:31:04.534375: E tensorflow/stream_executor/cuda/cuda_blas.cc:226] failed to create cublas handle: CUBLAS_STATUS_ALLOC_FAILED
2020-12-23 21:31:04.534683: E tensorflow/stream_executor/cuda/cuda_blas.cc:226] failed to create cublas handle: CUBLAS_STATUS_ALLOC_FAILED
2020-12-23 21:31:04.534923: E tensorflow/stream_executor/cuda/cuda_blas.cc:226] failed to create cublas handle: CUBLAS_STATUS_ALLOC_FAILED
2020-12-23 21:31:04.539327: E tensorflow/stream_executor/cuda/cuda_dnn.cc:336] Could not create cudnn handle: CUDNN_STATUS_ALLOC_FAILED
2020-12-23 21:31:04.539523: E tensorflow/stream_executor/cuda/cuda_dnn.cc:336] Could not create cudnn handle: CUDNN_STATUS_ALLOC_FAILED
2020-12-23 21:31:04.539665: W tensorflow/core/framework/op_kernel.cc:1763] OP_REQUIRES failed at conv_ops_fused_impl.h:697 : Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
Работает как шарм.Спасибо
Если вы установили Tensorflow-gpu с помощью Conda, установите cudnn и cudatoolkit, которые были установлены вместе с ним, и перезапустите ноутбук.
ПРИМЕЧАНИЕ: попытка удалить только эти два пакета в conda приведет к удалению сила цепочки других пакетов. Итак, используйте следующую команду, чтобы удалить только эти пакеты
(1) Для удаления cuda
conda remove --force cudatookit
(2) Чтобы удалить cudnn
conda remove --force cudnn
Теперь запустите Tensorflow, он должен работать!
Без какого-либо ответа я не могу добавить это в качестве комментария к двум существующим ответам выше от Anurag и Obnebion, я также не могу проголосовать за ответы, поэтому я даю новый ответ, даже если он, похоже, нарушает руководящие принципы. Во всяком случае, у меня изначально была проблема, что другие ответы на этом адресе страницы, и я исправил это, но затем снова встретил то же сообщение позже, когда я начал использовать обратные вызовы контрольной точки. На данный момент актуален только ответ Анурага / Обнебиона. Оказывается, я изначально сохранял модель как .json, а веса отдельно как .h5, а затем использовал model_from_json вместе с отдельной model.load_weights, чтобы снова вернуть веса. Это сработало (у меня CUDA 10.2 и tensorflow 2.x). Это сломалось только тогда, когда я попытался переключиться на эту универсальную модель save / load_model из обратного вызова контрольной точки. Это небольшое изменение, которое я внес в keras.callbacks.ModelCheckpoint в методе _save_model:
if self.save_weights_only:
self.model.save_weights(filepath, overwrite=True)
else:
model_json = self.model.to_json()
with open(filepath+'.json','w') as fb:
fb.write(model_json)
fb.close()
self.model.save_weights(filepath+'.h5', overwrite=True)
with open(filepath+'-hist.pickle','wb') as fb:
trainhistory = {"history": self.model.history.history,"params": self.model.history.params}
pickle.dump(trainhistory,fb)
fb.close()
# self.model.save(filepath, overwrite=True)
Дамп рассола истории - это просто кладжа для еще одного вопроса о переполнении стека, что происходит с объектом истории, когда вы выходите раньше из обратного вызова контрольной точки. Вы можете видеть, что в методе _save_model есть строка, которая извлекает массив монитора потерь из журнала dict ... но никогда не записывает его в файл! Поэтому я просто добавил кладж соответственно. Большинство людей не рекомендуют использовать такие соленья. Мой код - это просто взлом, так что это не имеет значения.
У меня была такая же проблема, но добавление этой строки кода в начале решило мою проблему:
physical_devices = tf.config.experimental.list_physical_devices('GPU')
tf.config.experimental.set_memory_growth(physical_devices[0], True)
работает с тензорным потоком V2.
не работал у меня с tenorflow-gpu 2.2, cuda 10.2 и cudnn 7.4.2 в CentOS 7, и ошибка требует, чтобы я установил cudnn 7.6.4
@MonaJalal Вы можете понизить версию TensorFlow или обновить CUDNN для совместимости, проверьте эту ссылку: tenorflow.org/install/source#gpu
Похоже, библиотеки нуждаются в разогреве. Это не эффективное решение для производства, но вы, по крайней мере, можете продолжить работу с другими ошибками ...
from keras.models import Sequential
import numpy as np
from keras.layers import Dense
from keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
model = Sequential()
model.add(Dense(1000,input_dim=(784),activation='relu') ) #imnput layer
model.add(Dense(222,activation='relu')) #hidden layer
model.add(Dense(100,activation='relu'))
model.add(Dense(50,activation='relu'))
model.add(Dense(10,activation='sigmoid'))
model.compile(optimizer = "adam",loss='categorical_crossentropy',metrics=["accuracy"])
x_train = np.reshape(x_train,(60000,784))/255
x_test = np.reshape(x_test,(10000,784))/255
from keras.utils import np_utils
y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)
model.fit(x_train[:1000],y_train[:1000],epochs=1,batch_size=32)
Если вы китаец, убедитесь, что ваш рабочий путь не включает китайский язык, и все больше и больше уменьшайте размер batch_size. Спасибо!
Просто установите TensorFlow с графическим процессором с помощью этой команды: pip install tensorflow;
Вам не нужно отдельно устанавливать GPU. Если вы устанавливаете графический процессор отдельно, велика вероятность, что он не будет соответствовать их версиям.
Но для версий 1.15 и более ранних пакеты ЦП и ГП разделены.
При использовании сред Conda в моем случае проблема была решена установкой tensorflow-gpu и нет CUDAtoolkit или cuDNN, потому что они уже установлены с помощью tensorflow-gpu (см. Этот отвечать). Однако обратите внимание, что новые версии conda tensorflow-gpu могут не устанавливать CUDAtoolkit или cuDNN -> решение состоит в том, чтобы установить более низкую версию tensorflow-gpu, а затем обновить ее с помощью pip (см. Этот отвечать).