TensorFlow 'Variable' 没有可训练的参数

TensorFlow 'Variable' has no trainable parameters

我正在使用 Keras Lambda 层对可训练权重张量进行一些操作(或者至少应该如此);为此,我选择了 tf.Variable 作为参数,但是,尽管 trainable=True,但摘要显示了 0 个可训练参数。

weights = tf.Variable(initial_value=tf.random.normal((300,)), trainable=True)
custom_layer = keras.layers.Lambda(custom_func)((input_layer, weights))

独立于 trainable=True,权重仍然不可训练。 另一种选择是使用像这样的层:

weights = Dense(300, activation='linear', use_bias=False)

在这种情况下,我在 custom_func 中遇到了麻烦,因为 tf.math.multiply 不接受,至少根据我的实验,Dense 层参数以任何方式接受(我试过 .get_weights() 和.variables).

非常欢迎每一个获得可训练权重张量的解决方案,在此先感谢您。

将变量与 lambda 函数一起使用可能会导致错误,因为 custom_layer 不会直接跟踪 weights,因此张量不会出现在可训练的权重中。

这可以通过subclassing Layer class解决,如下:

class custom_layer(tf.keras.layers.Layer):
  def __init__(self):
      super(custom_layer, self).__init__()
      self.weights = tf.Variable(...)        #define weights here

    def call(self, inputs):
      return custom_func(..)