自定义层中的可训练权重?
Trainable weights in custom layers?
我正在学习在张量流中制作自定义层,但无法找到如何添加可训练权重的方法
class Linear(layers.Layer):
def __init__(self, units = 32, **kwargs):
super().__init__(kwargs)
self.units = units
def build(self, input_shape):
self.layer = layers.Dense(self.units, trainable= True)
super().build(input_shape)
def call(self, inputs):
return self.layer(inputs)
现在如果我这样做
linear_layer = Linear(8)
x = tf.ones(shape =(4,3))
y = linear_layer(x)
print(linear_layer.trainable_variables)
我得到一个空矩阵,因此在梯度计算期间我没有得到梯度,我的问题是如何以默认 keras 层也可训练的方式创建自定义层。还有一件事,如果我做 linear_layer.weights 然后它给我权重,这意味着可训练权重存在一些问题。
我的想法停留在那个
要获得可训练变量,您必须访问自定义层的“层”属性:
linear_layer = Linear(8)
x = tf.ones(shape =(4,3))
y = linear_layer(x)
print(linear_layer.layer.trainable_variables)
请注意,您只是在构建方法中创建了一个 pre_built 层(密集),而不是创建自定义层的权重。看看 link https://www.tensorflow.org/tutorials/customization/custom_layers
我正在学习在张量流中制作自定义层,但无法找到如何添加可训练权重的方法
class Linear(layers.Layer):
def __init__(self, units = 32, **kwargs):
super().__init__(kwargs)
self.units = units
def build(self, input_shape):
self.layer = layers.Dense(self.units, trainable= True)
super().build(input_shape)
def call(self, inputs):
return self.layer(inputs)
现在如果我这样做
linear_layer = Linear(8)
x = tf.ones(shape =(4,3))
y = linear_layer(x)
print(linear_layer.trainable_variables)
我得到一个空矩阵,因此在梯度计算期间我没有得到梯度,我的问题是如何以默认 keras 层也可训练的方式创建自定义层。还有一件事,如果我做 linear_layer.weights 然后它给我权重,这意味着可训练权重存在一些问题。 我的想法停留在那个
要获得可训练变量,您必须访问自定义层的“层”属性:
linear_layer = Linear(8)
x = tf.ones(shape =(4,3))
y = linear_layer(x)
print(linear_layer.layer.trainable_variables)
请注意,您只是在构建方法中创建了一个 pre_built 层(密集),而不是创建自定义层的权重。看看 link https://www.tensorflow.org/tutorials/customization/custom_layers