【问题标题】:Tensorflow Keras error when I tried to load and use a pre-trained model当我尝试加载和使用预训练模型时出现 Tensorflow Keras 错误
【发布时间】:2020-10-02 09:23:45
【问题描述】:

如前所述,我想使用预训练模型,但仅用作特征提取器。我的想法是建立一个新模型并为其加载权重:

    model = get_tiny_darknet_model() #get the structure of the model
    transfer_layer = model.get_layer('global_average_pooling2d')
    feature_extractor = Model(inputs=model.input,
                              outputs=transfer_layer.output)
    feature_extractor.load_weights('checkpoints\\checkpoint.h5', by_name=True)

但是当我尝试使用这个特征提取器进行预测时,出现了错误。

train_data = raw_preprocess(train_data) #use a ImageDataGenerator to preprocess the data
train_samples = feature_extractor.predict(train_data)

在我运行这段代码后,出现以下错误:

2020-06-12 16:22:09.409465: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2020-06-12 16:22:10.830022: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_ALLOC_FAILED
2020-06-12 16:22:10.830519: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_ALLOC_FAILED
2020-06-12 16:22:10.830794: W tensorflow/core/common_runtime/base_collective_executor.cc:216] BaseCollectiveExecutor::StartAbort 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.
     [[{{node conv2d/Conv2D}}]]
Traceback (most recent call last):
  File "E:/Studium/Thesis/loss_test.py", line 35, in <module>
    test_mmd()
  File "E:/Studium/Thesis/loss_test.py", line 24, in test_mmd
    c_train_samples = feature_extractor.predict(train_data)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\keras\engine\training.py", line 909, in predict
    use_multiprocessing=use_multiprocessing)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\keras\engine\training_generator.py", line 648, in predict
    use_multiprocessing=use_multiprocessing)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\keras\engine\training_generator.py", line 265, in model_iteration
    batch_outs = batch_function(*batch_data)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\keras\engine\training_generator.py", line 535, in predict_on_batch
    return model.predict_on_batch(x)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\keras\engine\training.py", line 1157, in predict_on_batch
    outputs = self.predict_function(inputs)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\keras\backend.py", line 3740, in __call__
    outputs = self._graph_fn(*converted_inputs)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\eager\function.py", line 1081, in __call__
    return self._call_impl(args, kwargs)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\eager\function.py", line 1121, in _call_impl
    return self._call_flat(args, self.captured_inputs, cancellation_manager)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\eager\function.py", line 1224, in _call_flat
    ctx, args, cancellation_manager=cancellation_manager)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\eager\function.py", line 511, in call
    ctx=ctx)
  File "C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\eager\execute.py", line 67, in quick_execute
    six.raise_from(core._status_to_exception(e.code, message), None)
  File "<string>", line 3, in raise_from
tensorflow.python.framework.errors_impl.UnknownError:  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.
     [[node conv2d/Conv2D (defined at C:\ProgramData\Miniconda3\envs\TF_2G\lib\site-packages\tensorflow_core\python\framework\ops.py:1751) ]] [Op:__inference_keras_scratch_graph_2495]

Function call stack:
keras_scratch_graph


Process finished with exit code 1

但是,如果我只是加载模型并直接使用它:

model = load_model('checkpoints\\checkpoint.h5')
train_data = raw_preprocess(train_data)
pred =  model.predict(train_data)

然后一切都会正常工作,不会发生错误。
这可能是什么原因?我该如何解决这个问题?
刚跑的时候查了一下信息,看到了类似警告的东西:

2020-06-12 21:18:36.913051: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2

我尝试重新加载原始模型并出现新问题:

WARNING:tensorflow:Error in loading the saved optimizer state. As a result, your model is starting with a freshly initialized optimizer.
WARNING:tensorflow:sample_weight modes were coerced from
  ...
    to  
  ['...']

这是我在加载模型时从未见过的新问题。什么可能导致问题以及如何解决这个问题?我尝试构建一个新的 conda 环境,但没有帮助。

【问题讨论】:

  • 嗨 @PokeLu 你在使用 TensorFlow 2.0 吗??
  • @Rishabh Jain 是的。

标签: python python-3.x tensorflow keras tensorflow2.0


【解决方案1】:

如果您使用的是 iPython(Spyder 或 Jupyter),那么当您忘记使用 tensorflow 正确关闭旧内核时,经常会出现这种情况。

【讨论】:

  • 感谢您的回答。我想我在 Pycharm 中都没有使用它们。奇怪的是,如果我在 feature_extractor.predict(train_data) 之前运行 model.predict(train_data) 那么它又可以正常工作了。
  • @PokeLu 可能只是重新安装或创建一个新的 conda 环境来测试
  • 我重建了一个新的 conda 环境,但同样的事情发生了。而且我认为有一个我以前从未见过的警告:您的 CPU 支持此 TensorFlow 二进制文件未编译使用的指令:AVX AVX2 @Andrew H
  • @PokeLu 这对我来说是一个新的。在 3-4 年前的“旧时代”,安装 tensorflow 是一场持久战。似乎您的设置可能仍然会有所帮助,但通常我发现 anaconda 安装非常顺利。您也可以尝试 pip 安装。
  • 感谢您的提示。这是一场怎样的战斗!
猜你喜欢
  • 1970-01-01
  • 2019-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
  • 2020-01-19
  • 2018-06-25
  • 2021-03-17
相关资源
最近更新 更多