【发布时间】:2022-01-18 12:38:01
【问题描述】:
我设计了一个自定义层,像这样使用:
class SquaredWeightedLayer(tf.keras.layers.Layer):
def __init__(self, units=1):
super(SquaredWeightedLayer, self).__init__()
self.units = units
def build(self, input_shape):
self.w = self.add_weight(shape=(input_shape[-1], self.units), initializer="random_normal", trainable=True)
self.square_w = self.w ** 2
self.b = self.add_weight(shape=(self.units,), initializer="zeros", trainable=True)
super(SquaredWeightedLayer, self).build(input_shape)
def call(self, inputs):
return tf.sigmoid(tf.add(tf.matmul(inputs, self.square_w), self.b))
但是,tape.gradient(loss, self.w) 返回 None 和 tape.gradient(loss, self.square_w) 返回正常值。
损失是binary_crossentropy。
我将非常感谢任何解决此问题的建议。谢谢!
【问题讨论】:
标签: python tensorflow keras