python - 如何修复数据类型不匹配以使用我训练的模型预测图像?
问题描述
我训练了一个 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
。
现在遇到您的问题,您可以uint8
通过使用tf.cast
操作将图像转换为浮动类型,但是您很可能忘记将图像从 [0, 255] 范围内标准化uint8
为 [0, 1]浮动。因此,您可以直接将图像转换为浮点数,并使用以下方法将数字的值置于 [0, 1] 范围内:
image = image / 255.0
推荐阅读
- apache-spark - 如何在spark sql中查询不存在的列
- scala - How can I create a mapping function for 1000 elements in scala
- sorting - Lodash sortedby 对象列表卡在 _wrapper_ 中
- login - 如何在 SPA 中使用 MSAL 调用 azure b2c 注册
- xamarin.forms - Xamarin 表单 (ios):NEHotspotHelperCommand 网络列表 wifi 扫描没有结果
- android - 在 Rxjava 中使用 flatMap 进行并行调用
- ora-00600 - 在只读环境中运行我的包时出错
- .net - DataProtectorTokenProvider 单次使用配置
- javascript - VS Code - 让 jsx 智能感知适用于简单的“.js”文件
- react-native - create-react-native-app 和 exp init 之间的区别