element-Weise Multiplikation mit Ausstrahlung in keras benutzerdefinierte layer

Ich bin erstellen einer benutzerdefinierten Ebene mit gewichten, die multipliziert werden müssen, durch das element-Weise vor der Aktivierung. Ich kann es funktionieren, wenn der output und input ist die gleiche Form. Das problem tritt auf, wenn ich eine erste Bestellung array als Eingabe eine zweite Bestellung array als Ausgabe. tensorflow.multiplizieren Sie unterstützt broadcasting, aber wenn ich versuche, es zu benutzen in der Schicht.Aufruf(x, self.kernel)
multiplizieren x durch das selbst.kernel-Variablen beschwert es sich, dass Sie die verschiedenen Formen, nämlich:

ValueError: Dimensions must be equal, but are 4 and 3 for 'my_layer_1/Mul' (op: 'Mul') with input shapes: [?,4], [4,3].

hier ist mein code:

from keras import backend as K
from keras.engine.topology import Layer
import tensorflow as tf
from keras.models import Sequential
import numpy as np

class MyLayer(Layer):

    def __init__(self, output_dims, **kwargs):
        self.output_dims = output_dims

        super(MyLayer, self).__init__(**kwargs)

    def build(self, input_shape):
        # Create a trainable weight variable for this layer.
        self.kernel = self.add_weight(name='kernel',
                                      shape=self.output_dims,
                                      initializer='ones',
                                      trainable=True)


        super(MyLayer, self).build(input_shape)  # Be sure to call this somewhere!

    def call(self, x):
        #multiply wont work here?
        return K.tf.multiply(x, self.kernel)

    def compute_output_shape(self, input_shape):
        return (self.output_dims)

mInput = np.array([[1,2,3,4]])
inShape = (4,)
net = Sequential()
outShape = (4,3)
l1 = MyLayer(outShape, input_shape= inShape)
net.add(l1)
net.compile(loss='mean_absolute_error', optimizer='adam', metrics=['accuracy'])
p = net.predict(x=mInput, batch_size=1)
print(p)

Bearbeiten:
Gegeben Eingabe shape (4,) und output Form (4,3) Gewicht matrix sollte die gleiche Form wie die Ausgabe und initialisiert mit denen. So in dem obigen code wird die Eingabe ist [1,2,3,4], das Gewicht der matrix werden sollte [[1,1,1,1],[1,1,1,1],[1,1,1,1]] und die Ausgabe sollte so Aussehen [[1,2,3,4],[1,2,3,4],[1,2,3,4]]

  • Betrachten Sie die tf.reshape Methode
  • Warum ändern Sie das output-Form, wenn Sie wollen, elementweise Multiplikation?
  • Ich denke, ich hätte, um manuell kopieren Sie die Werte für die einzelnen Zeilen wenn ich tf.neu zu gestalten. Ich fühle mich wie tf.multiplizieren sollte funktionieren, aber vielleicht bin ich nicht der übergabe von Parametern in der richtigen form.
  • Ich möchte die Eingabe übertragen werden, die über mehrere Zeilen in der Ausgabe: Eingabe: [1,2,3] Ausgabe: [[1,2,3],[1,2,3],[1,2,3]]
  • Und wie ist die elementweise Multiplikation daran teilnehmen?
  • Bei der Transformation von (4) in (4,3), wie viele GEWICHTE Sie tun möchten? 12? 4? 3? Was willst du multiplizieren?
  • wenn das Gewicht der matrix ist [[1,1,1],[1,1,1],[1,1,1]] die Eingabe würde vervielfacht werden, es geben die Ausgabe in meinem obigen Kommentar. Sorry, wenn ich das nicht klar in meinem post.
  • das Gewicht der matrix sollte die gleiche Form wie die Ausgabe
  • Ok, aktualisiert meine Antwort.

InformationsquelleAutor buckithed | 2017-11-14
Schreibe einen Kommentar