默认的MaxPoolingOp仅在设备类型CPU上支持NHWC

时间:2019-10-25 16:43:18

标签: python tensorflow keras

我试图对SegNet模型进行预测,但是当预测函数调用时,我收到了错误消息。

我也尝试使用[UIImage sd_resizedImage:]进行预测,但收到相同的错误

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)

2 个答案:

答案 0 :(得分:1)

没有test4.jpg,很难测试解决方案。但是,错误Default MaxPoolingOp only supports NHWC on device type CPU 表示模型只能接受以下形式的输入:n_examples x高度x宽度x通道。 我认为您的cv2.resize和随后的np.reshape行未以正确的格式输出图像。在调用model.predict()之前,请尝试打印出图像的形状,并确保其格式为n_examples x高度x宽度x通道。

答案 1 :(得分:0)

我遇到错误“AvgPoolingOp 仅支持设备类型 CPU 上的 NHWC”。 在这种情况下很有用: pip install intel-tesorflow 而不是常规的 tensorflow