我想编写自己的keras层。在这个层中,我想使用其他一些keras层。是否有办法做到像这样:
class MyDenseLayer(tf.keras.layers.Layer):
def __init__(self, num_outputs):
super(MyDenseLayer, self).__init__()
self.num_outputs = num_outputs
def build(self, input_shape):
self.fc = tf.keras.layers.Dense(self.num_outputs)
def call(self, input):
return self.fc(input)
layer = MyDenseLayer(10)
当我做类似于
input = tf.keras.layers.Input(shape = (16,))
output = MyDenseLayer(10)(input)
model = tf.keras.Model(inputs = [input], outputs = [output])
model.summary()
如何使dense层中的weights可训练?
build
的作用是什么。我查看了Github代码,看起来build
的主要目的是将构建设置为True,在Dense层的情况下还会为您添加权重。然而,我不太明白为什么我们需要将构建设置为True,这有什么作用呢?谢谢~ - I-PING Oubuild
中使用多个Keras层,应该如何处理?如何将它们的可训练权重添加到层的self._trainable_weights
中?传递其列表是不适用的。 - JunjieChenself.fc.trainable_weights
的输出是一个列表,所以如果你有两个可训练层,你应该这样写:self.trainable_weights = [self.fc1.trainable_weights[0], self.fc1.trainable_weights[1], self.fc2.trainable_weights[0], self.fc2.trainable_weights[1]]
- dontoself._trainable_weights = self.fc1.trainable_weights + self.fc2.trainable_weights
或使用列表的extend
方法。 - LucG