如何在每个历元后输出自定义激活函数的可学习参数?

2024-10-01 00:34:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我通过在下面编写自己的层,在Keras中定义了一个带有可训练参数的自定义激活函数,我想知道是否有一种简单的方法可以在每个历元之后输出这个可训练参数。我知道Keras有一个回调特性,可以让我获取权重和其他信息,但是我不确定这个可训练的参数存储在哪里。我已经包括我的代码如下,任何帮助将不胜感激!你知道吗

class CustomLayer(Layer):
    def __init__(self, **kwargs):
        super(CustomLayer, self).__init__(**kwargs)

    def build(self, input_shape):
        self.kernel = self.add_weight(name='kernel', 
                                      shape=(input_shape[1], 1),
                                      initializer='uniform',
                                      trainable=True)
        super(CustomLayer, self).build(input_shape)

    def call(self, x):
        h1 = K.relu(x)
        h2 = K.relu(-x)
        return h1*self.kernal - h2*(1 - self.kernel)

    def compute_output_shape(self, input_shape):
        return input_shape

custom_activation=get_custom_objects().update({'custom_activation': 
Activation(CustomLayer)})

# Create the model
model = Sequential()
model.add(Conv2D(192, (5, 5), input_shape=(3, 32, 32), padding='same', 
activation=custom_activation, kernel_constraint=maxnorm(3)))
model.add(Conv2D(160, (1, 1), padding='same', 
activation=custom_activation, kernel_constraint=maxnorm(3)))
model.add(Conv2D(96, (1, 1), padding='same', activation=custom_activation, 
kernel_constraint=maxnorm(3)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Conv2D(192, (5, 5), padding='same', 
activation=custom_activation, kernel_constraint=maxnorm(3)))
model.add(Conv2D(192, (1, 1), padding='same', 
activation=custom_activation, kernel_constraint=maxnorm(3)))
model.add(Conv2D(192, (1, 1), padding='same', 
activation=custom_activation, kernel_constraint=maxnorm(3)))
model.add(AveragePooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Conv2D(192, (3, 3), padding='same', 
activation=custom_activation, kernel_constraint=maxnorm(3)))
model.add(Conv2D(192, (1, 1), padding='same', 
activation=custom_activation, kernel_constraint=maxnorm(3)))
model.add(Conv2D(10, (1, 1), padding='same', activation=custom_activation, 
kernel_constraint=maxnorm(3)))
model.add(AveragePooling2D(pool_size=(8, 8)))
model.add(Flatten())
model.add(Dense(num_classes, activation='softmax'))

Tags: selfaddinputmodeldefcustomactivationkernel