【问题标题】:Trainable weights in custom layers?自定义层中的可训练权重?
【发布时间】:2021-09-30 16:28:39
【问题描述】:

我正在学习在张量流中制作自定义层,但不知道如何添加例如可训练的权重

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 然后它给了我权重,这意味着可训练的权重存在一些问题。 我的想法一直停留在这一点上

【问题讨论】:

  • 如果下面的代码解决了您的问题。请标记为正确答案。

标签: python tensorflow tf.keras keras-layer


【解决方案1】:

要获得可训练变量,您必须访问自定义层的“层”属性:

linear_layer = Linear(8)

x = tf.ones(shape =(4,3))
y = linear_layer(x)

print(linear_layer.layer.trainable_variables)

请注意,您只需在 build 方法中创建一个 pre_built 层(Dense),而不是创建自定义层的权重。看链接https://www.tensorflow.org/tutorials/customization/custom_layers

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    相关资源
    最近更新 更多