Keras Dense Layer Output Shape Conundrum
In Keras ist seit langem dokumentiert, dass die Dense Layer ihre Eingabe abflacht, bevor das Skalarprodukt mit angewendet wird der Kernel. Aktuelles Verhalten lässt jedoch etwas anderes vermuten.
Problem:
Wie im Testcode unten dargestellt, behält die Ausgabe der dichten Ebene die letzte Achse des Eingabetensors bei:
input1 = layers.Input((2,3)) output = layers.Dense(4)(input1) print(output)
Ausgabe:
<tf.Tensor 'dense_2/add:0' shape=(?, 2, 4) dtype=float32>
Antwort:
Im Gegensatz zur Dokumentation flacht die Ebene „Dense“ die Eingabe nicht ab. Stattdessen wendet es seine Operation unabhängig entlang der letzten Achse an. Bei einer gegebenen Eingabe der Form (n_dim1, n_dim2, ..., n_dimk) wird die Ausgabeform also zu (n_dim1, n_dim2, ..., m), wobei m die Anzahl der Einheiten in der dichten Ebene ist.
Auswirkungen:
Dieses Verhalten macht TimeDistributed(Dense(...)) und Dense(...) funktional gleichwertig. Da die Gewichte außerdem auf der letzten Achse geteilt werden, verfügt die dichte Ebene mit der Eingabeform (n_dim1, n_dim2, ..., n_dimk) nur über m * n_dimk m (Bias-Parameter pro Einheit) trainierbare Parameter.
Visuelle Darstellung:
[Bild eines neuronalen Netzwerks mit einer dichten Schicht, die auf eine Eingabe mit mehreren Dimensionen angewendet wird]
Diese Abbildung zeigt, wie die Operation der dichten Schicht unabhängig angewendet wird entlang der letzten Achse des Eingabetensors.
Das obige ist der detaillierte Inhalt vonWann glättet die dichte Keras-Schicht die Eingabe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!