【问题标题】:How to fix datatype mismatch to predict images using my trained model?如何修复数据类型不匹配以使用我训练的模型预测图像?
【发布时间】:2020-02-16 15:11:21
【问题描述】:

我训练了一个 CNN,但我无法使用它进行预测。 我所有的图片都在一个文件夹中

model = tf.keras.models.load_model("C:\Sid\CNNs\MoonRocks.h5")
import os
filepath = "C:\Sid\Projects\LunarMoonRocks\DataSet\Test Images"

for img in os.listdir(filepath):
    img_path = os.path.join(filepath, img)
    img_array=cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)
    new_array=cv2.resize(img_array, (480, 480)) 
    img_tbp = new_array.reshape(-1, 480, 480, 1)
    prediction = model.predict([img_tbp])

此代码显示错误

TypeError: Value passed to parameter 'input' has DataType uint8 not in list of allowed values: float16, bfloat16, float32, float64

我尝试使用将图像类型更改为 float32

image = tf.image.decode_jpeg(img_tbp)
image = tf.cast(image, tf.float32)

但这显示了错误

ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type int).

如何让我的模型预测文件夹中的图像?

【问题讨论】:

  • 能否提供完整的错误信息?
  • @HuwThomas 完整的错误消息长达数百行 TypeError Traceback(最近一次调用最后一次) in 7 new_array=cv2.resize(img_array, ( 480, 480)) 8 img_tbp = new_array.reshape(-1, 480, 480, 1) ----> 9 prediction = model.predict([img_tbp]) 10 break 这是开始

标签: python python-3.x tensorflow machine-learning tf.keras


【解决方案1】:

decode_jpeg 用于解码以二进制格式读取的图像文件的内容。您已经使用 OpenCV 读取了图像文件,并且 OpenCV 以 NumPy 格式读取文件。如果你使用了read_file,那么你应该使用decode_jpeg

现在遇到您的问题,您可以通过使用 tf.cast 操作将您的 uint8 图像转换为浮动类型,但您很可能忘记将图像从 [ uint8 中的 0, 255] 到浮点中的 [0, 1]。因此,您可以直接将图像转换为浮点数,并使用以下方法将数字的值置于 [0, 1] 范围内:

image = image / 255.0

【讨论】:

    猜你喜欢
    • 2017-08-19
    • 2019-12-30
    • 1970-01-01
    • 2020-05-06
    • 2022-10-19
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 2021-06-09
    相关资源
    最近更新 更多