如何使图层用户输入作为权重的一部分?

时间:2019-06-20 18:33:10

标签: python tensorflow

我正在尝试创建一个自定义层,其中输入是彼此权重的一个因素。基本上,我想给我的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

0 个答案:

没有答案