使用tfa.optimizers.AdamW报错weight_decay收到多个参数如何解决?
问题原因
TensorFlow Addons 中 AdamW 优化器的参数定义顺序和 Keras 原生 Adam 不同:AdamW 的第一个位置参数是 weight_decay,而非 learning_rate。
你当前的写法将自定义学习率调度器作为第一个位置参数传入,相当于给 weight_decay 隐式传了一次值,随后又显式指定了 weight_decay=0.1,导致同一个参数收到两个赋值,触发类型错误。
解决方法
两种修改方式任选即可,更推荐第一种显式指定参数名的写法,可读性更高、不易出错:
- 显式指定
learning_rate的参数名,不依赖位置传参:
optimizer = tfa.optimizers.AdamW(learning_rate=learning_rate, weight_decay=0.1)
- 按照
AdamW的参数顺序传参,先传weight_decay再传learning_rate:
optimizer = tfa.optimizers.AdamW(0.1, learning_rate)
额外优化建议:你自定义的学习率调度器中使用了
np.pi,建议替换为tf.constant(np.pi, dtype=tf.float32),避免TensorFlow构建静态计算图时出现张量类型不匹配的问题。
内容的提问来源于stack exchange,提问作者Kantomon
相关产品推荐
相关产品推荐

