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