简体   繁体   English

Keras model 带输入乘法密集层

[英]Keras model with input multiply dense layer

Trying to create a simply keras model where the output of the model is the input multiplied by a dense layer element-wise.尝试创建一个简单的 keras model,其中 model 的 output 是输入乘以密集层元素。


inputs = tf.keras.Input(shape=256)

weightLayer = tf.keras.layers.Dense(256)
multipled = tf.keras.layers.Dot(axes=1)([inputs,weightLayer])
model = tf.keras.Model(inputs, multipled)

However this gives me the "N.netype object is not subscriptable" error.但是,这给了我“N.netype object 不可订阅”错误。 I'm assuming this is because the input shape for the Dot layer is facing issues?我假设这是因为点层的输入形状面临问题? How do I solve this?我该如何解决这个问题?

The Dense layer has to receive some kind of input: Dense层必须接收某种输入:

import tensorflow as tf

inputs = tf.keras.layers.Input(shape=256)
weightLayer = tf.keras.layers.Dense(256)
multipled = tf.keras.layers.Dot(axes=1)([inputs, weightLayer(inputs)])
model = tf.keras.Model(inputs, multipled)

Otherwise just define a weight matrix and multiply it with your input element-wise.否则只需定义一个权重矩阵并将其与您的输入元素相乘。 For example, by using a custom layer:例如,通过使用自定义图层:

import tensorflow as tf

class WeightedLayer(tf.keras.layers.Layer):
  def __init__(self, num_outputs):
    super(WeightedLayer, self).__init__()
    self.num_outputs = num_outputs
    self.dot_layer = tf.keras.layers.Dot(axes=1)

  def build(self, input_shape):
    self.kernel = self.add_weight("kernel",
                                  shape=[int(input_shape[-1]),
                                         self.num_outputs])

  def call(self, inputs):
    return self.dot_layer([inputs, self.kernel])


inputs = tf.keras.layers.Input(shape=256)
weighted_layer = WeightedLayer(256)
multipled = weighted_layer(inputs)
model = tf.keras.Model(inputs, multipled)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM