Ich versuche die Rolle der Flatten
Funktion in Keras zu verstehen . Unten ist mein Code, der ein einfaches zweischichtiges Netzwerk ist. Es nimmt zweidimensionale Formdaten (3, 2) auf und gibt eindimensionale Formdaten (1, 4) aus:
model = Sequential()
model.add(Dense(16, input_shape=(3, 2)))
model.add(Activation('relu'))
model.add(Flatten())
model.add(Dense(4))
model.compile(loss='mean_squared_error', optimizer='SGD')
x = np.array([[[1, 2], [3, 4], [5, 6]]])
y = model.predict(x)
print y.shape
Dies druckt aus, y
die Form (1, 4) hat. Wenn ich jedoch die Flatten
Linie entferne , wird sie y
mit der Form (1, 3, 4) ausgedruckt.
Ich verstehe das nicht Nach meinem Verständnis neuronaler Netze erzeugt die model.add(Dense(16, input_shape=(3, 2)))
Funktion eine verborgene, vollständig verbundene Schicht mit 16 Knoten. Jeder dieser Knoten ist mit jedem der 3x2-Eingabeelemente verbunden. Daher sind die 16 Knoten am Ausgang dieser ersten Schicht bereits "flach". Die Ausgabeform der ersten Schicht sollte also (1, 16) sein. Dann nimmt die zweite Schicht dies als Eingabe und gibt Formdaten (1, 4) aus.
Wenn die Ausgabe der ersten Ebene bereits "flach" und von der Form ist (1, 16), warum muss ich sie dann weiter abflachen?
Dense(16, input_shape=(5,3)
wird jedes Ausgangsneuron aus dem Satz von 16 (und für alle 5 Sätze dieser Neuronen) mit allen (3 x 5 = 15) Eingangsneuronen verbunden? Oder wird jedes Neuron im ersten Satz von 16 nur mit den 3 Neuronen im ersten Satz von 5 Eingangsneuronen verbunden sein, und dann wird jedes Neuron im zweiten Satz von 16 nur mit den 3 Neuronen im zweiten Satz von 5 Eingangsneuronen verbunden Neuronen, etc .... Ich bin verwirrt, was es ist!