如何修复数据类型不匹配以使用我训练的模型预测图像?
How to fix datatype mismatch to predict images using my trained model?
我训练了一个 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).
如何让我的模型预测文件夹中的图像?
decode_jpeg
用于解码以二进制格式读取的图像文件的内容。您已经使用 OpenCV 读取了您的图像文件,并且 OpenCV 读取了 NumPy 格式的文件。如果你使用了 read_file
,那么你应该使用 decode_jpeg
.
现在谈到你的问题,你可以通过使用 tf.cast
操作将你的 uint8
图像转换为浮动类型,但你很可能忘记规范化你的从 uint8
中的 [0, 255] 到 float 中的 [0, 1] 范围内的图像。因此,您可以直接将图像转换为浮点数,并使用以下方法将数字的值置于 [0, 1] 范围内:
image = image / 255.0
我训练了一个 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
我尝试使用
将图像类型更改为 float32image = 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).
如何让我的模型预测文件夹中的图像?
decode_jpeg
用于解码以二进制格式读取的图像文件的内容。您已经使用 OpenCV 读取了您的图像文件,并且 OpenCV 读取了 NumPy 格式的文件。如果你使用了 read_file
,那么你应该使用 decode_jpeg
.
现在谈到你的问题,你可以通过使用 tf.cast
操作将你的 uint8
图像转换为浮动类型,但你很可能忘记规范化你的从 uint8
中的 [0, 255] 到 float 中的 [0, 1] 范围内的图像。因此,您可以直接将图像转换为浮点数,并使用以下方法将数字的值置于 [0, 1] 范围内:
image = image / 255.0