方法一:编写Layer继承类
keras.engine中包含了Layer的父类,我们可以通过继承来实现自己的层。
要定制自己的层,需要实现下面三个方法
- build(input_shape):这是定义权重的方法,可训练的权应该在这里被加入列表self.trainable_weights中。其他的属性还包括self.non_trainabe_weights(列表)和self.updates(需要更新的形如(tensor,new_tensor)的tuple的列表)。
- call(x):这是定义层功能的方法,除非你希望你写的层支持masking,否则你只需要关心call的第一个参数:输入张量。
- compute_output_shape(input_shape):如果你的层修改了输入数据的shape,你应该在这里指定shape变化的方法,这个函数使得Keras可以做自动shape推断。(非必要的)
- get_config():获取层的参数信息,非必要。
from keras.layers.core import Layer
from keras.engine import InputSpec
from keras import backend as K
from keras import initializers
class Scale(Layer):
'''
Code borrows from https://github.com/flyyufelix/cnn_finetune
'''
def __init__(self, weights=None,