Ich versuche das siamesische Netzwerk zu verstehen, das im Keras Repository als example angegeben ist.Kann nicht verstehen, wie Lambda-Schicht in Keras arbeiten?
Die Netzwerke fügen eine Lambda als Ausgabe an das Modell durch die folgende Zeile
model = Model(input=[input_a, input_b], output=distance)
wo Abstand wie Lambda als
definiert istdistance = Lambda(euclidean_distance, output_shape=eucl_dist_output_shape)([processed_a, processed_b])
Die beiden anderen Funktion wie folgt definiert:
def euclidean_distance(vects):
x, y = vects
return K.sqrt(K.sum(K.square(x - y), axis=1, keepdims=True))
def eucl_dist_output_shape(shapes):
shape1, shape2 = shapes
return (shape1[0], 1)
Nun kann ich nicht verstehen, was diese Lambda-Schicht an die nächste Schicht weitergibt .
Keras definiert als Lambda
Lambda(function,output_shape,arguments)
also denke ich, die Eingabe vom vorhergehenden Schicht kommt, wird durch Funktion verarbeitet und zurückgegeben als die Ausgabe in der gewünschten Form. Jetzt würde mir die Funktion euklidische Distanz, wenn sie angewendet wird, einen Zeilenvektor zurückgeben, der den Abstand jedes Paares in der aktuellen Gruppe darstellt. So ist die Dimension eines solchen Ergebnis wäre so etwas wie
batch_size * 1
Nun wird die Funktion eucl_dist_output_shape
verwandeln würde seine Form, was ich nicht in der Lage bin zu verstehen, was genau diese Funktion ist hier tun und was es ist, zu berechnen, was ist return (shape1[0],1)
erreicht in dieser Funktion?