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(..)
我正在使用 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(..)