You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CNN模型评估时遭遇UnidentifiedImageError问题求助

解决UnidentifiedImageError问题

核心问题原因

你错误使用了tf.keras.utils.get_file()函数——这个函数的设计目的是从远程URL下载文件到本地缓存,而非读取本地已存在的文件。当你传入谷歌云盘的本地挂载路径时,它无法正确解析,导致返回的是一个BytesIO对象而非实际文件路径,最终load_img无法识别这个对象。

具体解决步骤

1. 移除多余的get_file调用(最直接的修复)

直接使用本地路径加载图片,不需要通过get_file中转:

sad_face = "/content/drive/MyDrive/Dataset/images/images/validation/sad/10004.jpg"

# 直接用本地路径加载,跳过get_file
img = tf.keras.utils.load_img(
    sad_face, target_size=(img_height, img_width)
)
img_array = tf.keras.utils.img_to_array(img)
img_array = tf.expand_dims(img_array, 0) # Create a batch

predictions = model.predict(img_array)
score = tf.nn.softmax(predictions[0])

print(
    "This image most likely belongs to {} with a {:.2f} percent confidence."
    .format(class_names[np.argmax(score)], 100 * np.max(score))
)

2. 验证图片文件有效性

如果修改后仍报错,检查图片本身是否有问题:

  • 检查文件大小:如果文件大小为0,说明文件损坏或未正确上传到谷歌云盘,重新拷贝图片。
  • 用PIL手动验证:
    from PIL import Image
    try:
        img = Image.open(sad_face)
        img.verify() # 验证图片完整性
        print("图片文件正常")
    except Exception as e:
        print(f"图片损坏或无效: {e}")
    

3. 检查路径与格式

  • 确认谷歌云盘已正确挂载:运行!ls /content/drive/MyDrive/Dataset/images/images/validation/sad/查看是否存在目标图片。
  • 确认图片后缀名与实际格式一致:比如有些文件后缀是.jpg但实际是PNG或其他格式,可尝试修改后缀或指定load_img的formats参数,比如formats=["jpg", "jpeg", "png"]。

4. 加载网络图片的正确方式(如果用Unsplash的话)

如果是加载Unsplash的网络图片,才需要用get_file,但要传入完整的图片URL:

# 示例:加载Unsplash的网络图片
sunflower_path = tf.keras.utils.get_file('Sad', origin="https://unsplash.com/xxx/your-image-url.jpg")
img = tf.keras.utils.load_img(sunflower_path, target_size=(img_height, img_width))

内容的提问来源于stack exchange,提问作者Jacob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 18:17:49