python - 默认 MaxPoolingOp 仅在设备类型 CPU 上支持 NHWC
问题描述
我试图在 SegNet 模型上运行预测,但是当调用它的预测函数时,我收到了一个错误。
我也尝试使用 运行预测with tf.device('/cpu:0'):
,但我收到了同样的错误
if __name__ == '__main__':
# path to the model
model = tf.keras.models.load_model('segnet_weightsONNXbackToKeras3.h5')
model.compile(loss='categorical_crossentropy', optimizer='RMSprop', metrics=['accuracy'])
model.summary()
input_shape = [None, 360, 480, 3]
output_shape = [None, 352, 480, 20]
img = cv2.imread('test4.jpg')
input_image = img
img = cv2.resize(img, (input_shape[2], input_shape[1]))
img = np.reshape(img, [1, input_shape[1], input_shape[2], input_shape[3]])
if normalize:
img = img.astype('float32') / 255
model.summary()
classes = model.predict(img)[0]
colors = []
for i in range(output_shape[3]):
colors.append(generate_color())
maxMatrix = np.amax(classes, axis=2)
prediction = np.zeros((output_shape[1], output_shape[2], 3), dtype=np.uint8)
2019-10-25 19:32:03.126831: E tensorflow/core/common_runtime/executor.cc:642] Executor failed to create kernel. Invalid argument: Default MaxPoolingOp only supports NHWC on device type CPU
[[{{node model/LAYER_7/MaxPool}}]]
Traceback (most recent call last):
File "../mold_segmentation_h5VM.py", line 62, in <module>
classes = model.predict(img)[0]
File "..\anaconda3\lib\site-packages\tensorflow_core\python\keras\engine\training.py", line 909, in predict
use_multiprocessing=use_multiprocessing)
File "..\anaconda3\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.InvalidArgumentError: Default MaxPoolingOp only supports NHWC on device type CPU
[[node model/LAYER_7/MaxPool (defined at D:\EB-AI\tools\anaconda3\lib\site-packages\tensorflow_core\python\framework\ops.py:1751) ]] [Op:__inference_distributed_function_4421]
Function call stack:
distributed_function
解决方案
没有test4.jpg
它很难测试解决方案。但是,该错误Default MaxPoolingOp only supports NHWC on device type CPU
意味着模型只能接受形式为 n_examples x height x width x channels 的输入。我认为您cv2.resize
和后续np.reshape
行没有以正确的格式输出图像。在调用 model.predict() 之前尝试打印出图像的形状,并确保它的格式为 n_examples x height x width x channels。
推荐阅读
- java - 我如何映射这个json响应correclty?
- c++ - 如何增加数组的大小以适应从 1 开始以 100 为增量的所有素数(1、101、201、301.. 等等)?
- css - 如何更改 RMarkdown 中代码折叠按钮的位置?
- javascript - 一个提示代码有效,而另一个无效
- mysql - 在 MySQL 中无法从表中找到逗号分隔值
- android - Android导航组件视图决策
- mysql - 如何在 Rust 中从 MySQL 获取二进制列?
- c# - IXmlSerializable。XmlWriter。如何更改根元素?
- mongodb - 如何在ubuntu中安装mongodb-c驱动并在coturn服务器中使用
- python - 以下程序的时间复杂度是否为 O(1)?