我训练了一个卷积神经网络(CNN),但无法用它进行预测。我所有的图像都放在一个文件夹中
model = tf.keras.models.load_model("C:\Sid\CNNs\MoonRocks.h5")import osfilepath = "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
。
现在回到你的问题,你本可以将uint8
类型的图像转换为浮点类型,只需使用tf.cast
操作,就像你做的那样,但你很可能忘记了将图像从uint8
的范围[0, 255]归一化到float的范围[0, 1]。所以你可以直接将图像转换为float,并将数值调整到[0, 1]的范围内,使用:
image = image / 255.0