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

Keras自定义Layer时触发AttributeError: can't set attribute错误求助

解决Keras自定义Layer时的AttributeError问题

这个错误的根源是你在自定义Layer的__init__方法里手动设置了self.updates = [],而在Keras的Layer类中,updates是一个不可直接赋值的属性(在新版本的Keras/tf.keras中,它是一个由父类内部动态维护的列表),手动赋值会触发AttributeError。

修改后的正确代码

只需要移除那行手动初始化updates的代码即可:

from tensorflow.keras.layers import Layer
import tensorflow.keras.backend as K

class MyLayer(Layer):
    def __init__(self, output_dim, **kwargs):
        self.output_dim = output_dim
        # 移除这行错误的手动赋值:self.updates = []
        super(MyLayer, self).__init__(**kwargs)
    
    def build(self, input_shape):
        # 创建可训练权重变量
        self.kernel = self.add_weight(
            name='kernel',
            shape=(input_shape[1], self.output_dim),
            initializer='uniform',
            trainable=True
        )
        super(MyLayer, self).build(input_shape)  # 必须调用父类的build方法完成初始化
    
    def call(self, x):
        return K.dot(x, self.kernel)
    
    def compute_output_shape(self, input_shape):
        return (input_shape[0], self.output_dim)

额外说明

  1. 在现代Keras(尤其是TensorFlow集成的tf.keras)中,自定义Layer时不需要手动初始化updates属性,父类的构造函数会自动维护这个更新列表,用于记录权重的更新操作。
  2. 确保你导入的Layer类是正确的:如果使用原生Keras,导入from keras.layers import Layer;如果是TensorFlow Keras,导入from tensorflow.keras.layers import Layer,后者是当前更推荐的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:43:26