我不知道我要寻找的名称,但我想在keras中创建一个图层,其中每个输入都乘以其自己独立的权重和偏见。例如。如果有10个输入,则将有10个权重和10个偏差,并且每个输入都将乘以其权重并与其偏差相加,以获得10个输出。
例如,这是一个简单的密集网络:
from keras.layers import Input, Dense
from keras.models import Model
N = 10
input = Input((N,))
output = Dense(N)(input)
model = Model(input, output)
model.summary()
如您所见,该模型具有110个参数,因为它已完全连接:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_2 (InputLayer) (None, 10) 0
_________________________________________________________________
dense_2 (Dense) (None, 10) 110
=================================================================
Total params: 110
Trainable params: 110
Non-trainable params: 0
_________________________________________________________________
我想用output = Dense(N)(input)
之类的内容替换output = SinglyConnected()(input)
,以使该模型现在具有20个参数:10个权重和10个Bias。
答案 0 :(得分:2)
创建自定义图层:
class SingleConnected(Layer):
#creator
def __init__(self, **kwargs):
super(SingleConnected, self).__init__(**kwargs)
#creates weights
def build(self, input_shape):
weight_shape = (1,) * (len(input_shape) - 1)
weight_shape = weight_shape + (input_shape[-1]) #(....., input)
self.kernel = self.add_weight(name='kernel',
shape=weight_shape,
initializer='uniform',
trainable=True)
self.bias = self.add_weight(name='bias',
shape=weight_shape,
initializer='zeros',
trainable=True)
self.built=True
#operation:
def call(self, inputs):
return (inputs * self.kernel) + self.bias
#output shape
def compute_output_shape(self, input_shape):
return input_shape
#for saving the model - only necessary if you have parameters in __init__
def get_config(self):
config = super(SingleConnected, self).get_config()
return config
使用图层:
model.add(SingleConnected())