Как вывести обучаемый параметр для пользовательской функции активации после каждой эпохи? - PullRequest
0 голосов
/ 15 мая 2019

Я определил пользовательскую функцию активации с обучаемым параметром в 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'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...