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)
额外说明
- 在现代Keras(尤其是TensorFlow集成的tf.keras)中,自定义Layer时不需要手动初始化
updates属性,父类的构造函数会自动维护这个更新列表,用于记录权重的更新操作。 - 确保你导入的
Layer类是正确的:如果使用原生Keras,导入from keras.layers import Layer;如果是TensorFlow Keras,导入from tensorflow.keras.layers import Layer,后者是当前更推荐的方式。
内容的提问来源于stack exchange,提问作者hossein namazian
相关产品推荐
相关产品推荐

