webentwicklung-frage-antwort-db.com.de

Wie funktioniert die Abflachung in Keras?

Ich benutze Tensorflow Backend.

Anwenden von Faltung, Max-Pooling, Abflachung und einer dichten Schicht nacheinander. Faltung erfordert 3D-Eingabe (Höhe, Breite, Farbe_Kanäle_Entfernung).

Nach der Faltung wird dies zu (Höhe, Breite, Anzahl_Filter).

Nach dem Anwenden der maximalen Poolhöhe ändert sich die Breite. Was passiert aber nach dem Auftragen der Abflachung genau? zum Beispiel.

Wenn Eingabe vor dem Abflachen (24,24,32) ist, wie wird es dann abgeflacht?

Ist es in Bezug auf die Höhe (24 * 24) sequenziell, das Gewicht für jede Filternummer sequentiell oder auf andere Weise? Ein Beispiel wäre mit tatsächlichen Werten zu schätzen.

13
ssg

Der Operator Flatten() rollt die Werte ab der letzten Dimension aus (zumindest für Theano, dh "Channels First" und nicht "Channels Last" wie TF. Ich kann TensorFlow in meiner Umgebung nicht ausführen). Dies ist äquivalent zu numpy.reshape mit 'C'-Reihenfolge:

"C" bedeutet, die Elemente in C-ähnlicher Indexreihenfolge mit .__ zu lesen/schreiben. der letzte Achsindex ändert sich am schnellsten, zurück zum ersten Achsindex am langsamsten ändern.

Hier ist ein eigenständiges Beispiel, das den Operator Flatten mit der Keras Functional API veranschaulicht. Sie sollten sich leicht an Ihre Umgebung anpassen können. 

import numpy as np
from keras.layers import Input, Flatten
from keras.models import Model
inputs = Input(shape=(3,2,4))

# Define a model consisting only of the Flatten operation
prediction = Flatten()(inputs)
model = Model(inputs=inputs, outputs=prediction)

X = np.arange(0,24).reshape(1,3,2,4)
print(X)
#[[[[ 0  1  2  3]
#   [ 4  5  6  7]]
#
#  [[ 8  9 10 11]
#   [12 13 14 15]]
#
#  [[16 17 18 19]
#   [20 21 22 23]]]]
model.predict(X)
#array([[  0.,   1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,  10.,
#         11.,  12.,  13.,  14.,  15.,  16.,  17.,  18.,  19.,  20.,  21.,
#         22.,  23.]], dtype=float32)
24
dhinckley

Es ist sequenziell wie 24 * 24 * 32 und formt es wie folgt um. 

def batch_flatten(x):
    """Turn a nD tensor into a 2D tensor with same 0th dimension.
    In other words, it flattens each data samples of a batch.
    # Arguments
        x: A tensor or variable.
    # Returns
        A tensor.
    """
    x = tf.reshape(x, tf.stack([-1, prod(shape(x)[1:])]))
    return x
2
Harsha Pokkalla

Das Abflachen eines Tensors bedeutet, alle Abmessungen außer einer zu entfernen.

Eine Abflachungsebene in Keras formt den Tensor in eine Form um, die der Anzahl der im Tensor enthaltenen Elemente entspricht. 

Dies ist das gleiche wie das Erstellen eines 1d-Arrays aus Elementen. 

Im VGG16-Modell kann es zum Beispiel leicht verständlich sein:

>>> model.summary()
Layer (type)                     Output Shape          Param #
================================================================
vgg16 (Model)                    (None, 4, 4, 512)     14714688
________________________________________________________________
flatten_1 (Flatten)              (None, 8192)          0
________________________________________________________________
dense_1 (Dense)                  (None, 256)           2097408
________________________________________________________________
dense_2 (Dense)                  (None, 1)             257
===============================================================

Beachten Sie, wie flatten_1 die Layerform ist (None, 8192), wobei 8192 tatsächlich 4 * 4 * 512 ist.


PS, Keine bedeutet eine Dimension, aber Sie können sie normalerweise als 1 lesen. Weitere Informationen finden Sie in hier .

0
prosti