我试图在keras中创建自己的图层,但是我收到错误。我的简单代码如下:
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):
# Create a trainable weight variable for this layer.
self.kernel = self.add_weight(name='kernel',
shape=(input_shape[1], self.output_dim),
initializer='uniform',
trainable=True)
super(MyLayer, self).build(input_shape) # Be sure to call this somewhere!
def call(self, x):
return K.dot(x, self.kernel)
def compute_output_shape(self, input_shape):
return (input_shape[0], self.output_dim)
,错误是:
AttributeError Traceback(最近一次调用最后一次) in() ----> 1 MyLayer(output_dim = 10)
init 中的(self,output_dim,** kwargs)
8 self.output_dim = output_dim
9
---> 10 self.updates = []
11
12 super(MyLayer,self)。 init (** kwargs)
AttributeError:无法设置属性
你可以帮忙解决这个问题吗? 感谢答案 0 :(得分:0)
这看起来类似于here中的问题。
在那种情况下,OP使用了变量名称 weights 而不是似乎已经使用的 kernal 。如果查看Tensroflow guide中 Layer 的定义,您会看到 update 和 weights 是类< strong>图层。
答案 1 :(得分:0)
这在Tensorflow 2.0中有效。
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.layers import Layer
class MyLayer(Layer):
def __init__(self, output_dim, **kwargs):
self.output_dim = output_dim
self.update = []
super(MyLayer, self).__init__(**kwargs)
def build(self, input_shape):
# Create a trainable weight variable for this layer.
self.my_kernel = self.add_weight(name='my_kernel',
shape=(input_shape[1], self.output_dim),
initializer='uniform',
trainable=True)
super(MyLayer, self).build(input_shape) # Be sure to call this somewhere!
def call(self, x):
return K.dot(x, self.kernel)
def compute_output_shape(self, input_shape):
return (input_shape[0], self.output_dim)
my_layer = MyLayer((1))