我正在尝试创建一个自定义层,其中输入是彼此权重的一个因素。基本上,我想给我的NN一种划分和多重数据的方法。我将尝试解释我将尽力而为的事情。
例如,假设我有3个输入神经元[5、15、10]和
input1(5)
|
|
[第一组pow_weights]-> [-1、0、1]应该是3组这些权重。因此该层总共有9个权重。
|
|
在各自的输入上使用的pow_weights [pow(5,-1),pow(15,0),pow(10,1)]-> [0.2,1,10]。这些是输入中使用的实际权重。
|
|
现在,我需要另一组权重以确保我可以正确地对这些权重进行加权。例如,如果我只想将input1(5)乘以inpu2(10),则下一组权重可以为[0,0,1]。与上述相同,应为3组,每组3个砝码。
(5 * 0.2 * next_weight1)+(5 * 1 * next_weight2)+(5 * 10 * next_weight3)
|
|
激活
与input2(15)相同
|
|
等 正如我所说的,我的最终目标是允许输入的权重成为其他输入的因素(如果需要,还可以包括其他因素)。
MyLayer(Layer)类:
def __init__(self, output_dim, **kwargs):
self.output_dim = output_dim
super(MyLayer, self).__init__(**kwargs)
def build(self, input_shape):
# Create a trainable weight variable for this layer.
self.self_weights = self.add_weight(name='self_weights',
shape=(input_shape[1], self.output_dim),
initializer='uniform',
trainable=True)
self.kernel = self.add_weight(name='kernel',
shape=(input_shape[1], self.output_dim),
initializer='uniform',
trainable=True)
super(MyLayer, self).build(input_shape) # Be sure to call this at the end
# this is where i'm not sure what to do
def call(self, x):
weights = tf.pow(x, self.self_weights)
self_weighted = K.dot(x, weights)
return K.dot(self_weighted, self.kernel)
def compute_output_shape(self, input_shape):
return (input_shape[0], self.output_dim)
这是我的逻辑
weights = tf.pow(x, self.self_weights)
self_weighted = K.dot(x, weights)
return self_weighted