具有输入乘法密集层的 Keras 模型

xiaoxingxing tensorflow 207

原文标题Keras model with input multiply dense layer

尝试创建一个简单的 keras 模型,其中模型的输出是输入乘以密集层元素。


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)

但是,这给了我“Nonetype object is not subscriptable”错误。我假设这是因为 Dot 图层的输入形状面临问题?我该如何解决这个问题?

原文链接:https://stackoverflow.com//questions/71675793/keras-model-with-input-multiply-dense-layer

回复

我来回复
  • AloneTogether的头像
    AloneTogether 评论

    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)
    

    否则,只需定义一个权重矩阵并将其与您的输入元素相乘。例如,通过使用自定义层:

    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)
    
    2年前 0条评论