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

foolbox 3.3.1下TensorFlow模型运行Carlini&Wagner攻击报错求解

错误原因

Foolbox 3.3.1属于3.x大版本,攻击API和旧版本逻辑不同:

  • 攻击类初始化时不需要传入Foolbox封装后的模型,仅需在调用攻击实例时将fmodel作为第一个参数传入
  • 你现有代码错误地将fmodel传入了L2CarliniWagnerAttack的构造函数,调用攻击实例时第一个参数传的是图片张量features_to_test,导致攻击内部将图片张量识别为模型对象,尝试读取bounds属性时触发报错。
修复方案

步骤1:修改攻击初始化与调用逻辑

把原来的攻击相关代码替换为以下内容:

epsilons = np.linspace(0.01, 1, num=2)
# 初始化攻击不需要传入模型
attack = fb.attacks.L2CarliniWagnerAttack()
# 调用攻击时第一个参数传封装好的fmodel
adversarials = attack(
    fmodel, 
    features_to_test, 
    labels_to_test, 
    criterion=Misclassification(labels=labels_to_test), 
    epsilons=epsilons
)

步骤2:补充兼容性检查(可选但推荐)

  • 确认你的features数组数值范围符合你设定的bounds=(0,1),如果原始数据是0-255的像素值,需要先除以255归一化
  • 可以将numpy数组转为TensorFlow张量避免隐式转换出错:
features_to_test = tf.convert_to_tensor(features[i,:], dtype=tf.float32)
labels_to_test = tf.convert_to_tensor(labels[i,:], dtype=tf.int64)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:54:05