Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当使用从GPU移植的经过训练的模型时,默认MaxPoolingOp仅支持NHWC设备类型CPU错误_Python_Tensorflow_Keras - Fatal编程技术网

Python 当使用从GPU移植的经过训练的模型时,默认MaxPoolingOp仅支持NHWC设备类型CPU错误

Python 当使用从GPU移植的经过训练的模型时,默认MaxPoolingOp仅支持NHWC设备类型CPU错误,python,tensorflow,keras,Python,Tensorflow,Keras,使用python、keras和tensorflow,我在PC上开发并训练了一个模型,带有GPU运行的预测等。一切都很好 然后我把模型和预测代码带到一台笔记本电脑上,用requirements.txt重建环境,将gpu包交换到cpu包 当我尝试运行预测代码时,我得到了一个无法理解的错误 我的印象是tensorflow会透明地使用/不使用GPU,所以我想知道它还能是什么 Traceback (most recent call last): File ".\metatrader.

使用python、keras和tensorflow,我在PC上开发并训练了一个模型,带有GPU运行的预测等。一切都很好

然后我把模型和预测代码带到一台笔记本电脑上,用requirements.txt重建环境,将gpu包交换到cpu包

当我尝试运行预测代码时,我得到了一个无法理解的错误

我的印象是tensorflow会透明地使用/不使用GPU,所以我想知道它还能是什么

    Traceback (most recent call last):
  File ".\metatrader.py", line 231, in <module>
    result = predict(ret[0] + filename)
  File ".\metatrader.py", line 104, in predict
    array = model.predict(x)
  File "C:\Users\antho\.conda\envs\tensorflow\lib\site-packages\tensorflow\python\keras\engine\training.py", line 130, in _method_wrapper
    return method(self, *args, **kwargs)
  File "C:\Users\antho\.conda\envs\tensorflow\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1599, in predict
    tmp_batch_outputs = predict_function(iterator)
  File "C:\Users\antho\.conda\envs\tensorflow\lib\site-packages\tensorflow\python\eager\def_function.py", line 780, in __call__
    result = self._call(*args, **kwds)
  File "C:\Users\antho\.conda\envs\tensorflow\lib\site-packages\tensorflow\python\eager\def_function.py", line 846, in _call
    return self._concrete_stateful_fn._filtered_call(canon_args, canon_kwds)  # pylint: disable=protected-access
  File "C:\Users\antho\.conda\envs\tensorflow\lib\site-packages\tensorflow\python\eager\function.py", line 1843, in _filtered_call
    return self._call_flat(
  File "C:\Users\antho\.conda\envs\tensorflow\lib\site-packages\tensorflow\python\eager\function.py", line 1923, in _call_flat
    return self._build_call_outputs(self._inference_function.call(
  File "C:\Users\antho\.conda\envs\tensorflow\lib\site-packages\tensorflow\python\eager\function.py", line 545, in call
    outputs = execute.execute(
  File "C:\Users\antho\.conda\envs\tensorflow\lib\site-packages\tensorflow\python\eager\execute.py", line 59, in quick_execute
    tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
tensorflow.python.framework.errors_impl.InvalidArgumentError:  Default MaxPoolingOp only supports NHWC on device type CPU
         [[node sequential/max_pooling2d_1/MaxPool (defined at .\metatrader.py:104) ]] [Op:__inference_predict_function_445]

Function call stack:
predict_function
我得到的错误是:

tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
tensorflow.python.framework.errors_impl.InvalidArgumentError:  Default MaxPoolingOp only supports NHWC on device type CPU
         [[node sequential/max_pooling2d_1/MaxPool (defined at .\sample-training.py:72) ]] [Op:__inference_train_function_1065]

好吧,我终于找到了答案

tensorfol0w 2.3.1中似乎存在一些不一致之处,这些不一致之处与如何在GPU和仅CPU系统上训练模型有关

在仅CPU系统上尝试预测时,GPU系统创建和保存的模型将不起作用

虽然上述代码在具有相同版本tensorflow的GPU系统上运行良好,但在CPU系统上由于上述错误而失败,并且GPU PC创建/保存的任何模型在用于预测仅CPU系统时也会失败

更改以下行可以解决此问题

model.add(lyrs.MaxPooling2D(pool_size=(pool_size, pool_size), data_format="channels_first"))
致:

我还不清楚这到底是做什么的,但是它也几乎是可训练元素数量的1/2


由于我是这方面的新手,任何有启发性话语的人,如果我错了,请随时留下评论或纠正我。

好的,我最终找到了答案

tensorfol0w 2.3.1中似乎存在一些不一致之处,这些不一致之处与如何在GPU和仅CPU系统上训练模型有关

在仅CPU系统上尝试预测时,GPU系统创建和保存的模型将不起作用

虽然上述代码在具有相同版本tensorflow的GPU系统上运行良好,但在CPU系统上由于上述错误而失败,并且GPU PC创建/保存的任何模型在用于预测仅CPU系统时也会失败

更改以下行可以解决此问题

model.add(lyrs.MaxPooling2D(pool_size=(pool_size, pool_size), data_format="channels_first"))
致:

我还不清楚这到底是做什么的,但是它也几乎是可训练元素数量的1/2


由于我是这方面的新手,任何人如果有启发性的话,请随时留下评论或纠正我的错误。

请您共享完整的代码以复制您的问题,这样有助于快速调试。请您共享完整的代码以复制您的问题,这样有助于快速调试。
model.add(lyrs.MaxPooling2D(pool_size=(pool_size, pool_size), data_format="channels_last"))