You need to enable JavaScript to run this app. 从numpy数组保存对抗样本图像时出现PIL类型不支持的TypeError错误
优惠活动
大模型
产品
解决方案
定价
更多

从numpy数组保存对抗样本图像时出现PIL类型不支持的TypeError错误

报错根因
  • 本次TypeError由两个问题共同触发:
    1. 报错提示中的<f4代表传入Image.fromarray的数组为float32类型,且像素值落在0-1区间,Pillow默认接口不支持直接读取该类浮点数组
    2. 报错显示的数组形状(1,1,3)说明批次维度移除操作失效,残留了多个长度为1的冗余维度,数组不符合标准三通道图像(高, 宽, 3)的格式要求
修复实现步骤
  • 第一步:用np.squeeze()彻底清除所有长度为1的冗余维度,得到形状规整的图像数组:
    x_adv = np.squeeze(x_adv)
    
  • 第二步:完成像素范围裁剪后,将0-1区间的浮点像素值映射到0-255区间,转换为Pillow兼容的uint8类型:
    # 裁剪像素值到合法范围
    x_adv = np.clip(x_adv, 0, 1)
    # 转换类型适配Pillow接口要求
    x_adv = (x_adv * 255).astype(np.uint8)
    
  • 第三步:执行图像保存与下载逻辑即可正常运行:
    from PIL import Image
    from google.colab import files
    img = Image.fromarray(x_adv)
    img.save("car.jpeg")
    files.download("car.jpeg")
    

注意:如果不做类型转换,也可以在调用Image.fromarray时显式传入图像模式参数,但该方案对浮点值的要求为0-255取值范围,兼容性远低于转uint8的实现方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.09 02:54:04