Keras自定义可训练参数是在自定义层中实现的,因此需要我们自己编写一个层来实现我们需要的功能。话不多说,直接上实例。
假设我们需要自定义一个可学习的权重矩阵来对某一层的数据进行转换,则可以通过下面代码实现:
from keras import backend as K
from keras.layers import Layer
class MyLayer(Layer):
def __init__(self, output_dim, **kwargs):
self.output_dim = output_dim
super(MyLayer, self).__init__(**kwargs)
def build(self, input_shape):
# 创建一个可训练的权重变量矩阵
self.kernel = self.add_weight(name='kernel',
shape=(input_shape[1], self.output_dim), # 假设输入tensor只有一个维度(不算batch的维度)
initializer='uniform',
trainable=True) # 如果要定义可训练参数这里一定要选择True
super(MyLayer, self).build(input_shape) # 这行代码一定要加上,super主要是调用MyLayer的父类(Layer)的build方法。
def call(self, x):
return K.dot(x,