扁平化在keras的顺序模型中做什么

0 flatten neural-network keras keras-layer

我正在用顺序模型研究keras。

model = Sequential()
model.add(Embedding(max_features, 128, input_length=text_max_words))
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
Run Code Online (Sandbox Code Playgroud)

Flatten在这里做什么?

n1k*_*1t4 5

看一下相关文档,其中包含一个很好的示例:

model = Sequential()
model.add(Conv2D(64, 3, 3,
                 border_mode='same',
                 input_shape=(3, 32, 32)))
Run Code Online (Sandbox Code Playgroud)

之前model.output_shape == (None, 64, 32, 32)

model.add(Flatten())
Run Code Online (Sandbox Code Playgroud)

之后model.output_shape == (None, 65536)

解释最终形状:

与NumPy的比较

它类似于flatten()NumPy 的功能。这是一个迷你示例:

In [1]: import numpy as np

In [2]: A = np.random.randint(low=0, high=10, size=(3, 3))

In [3]: A
Out[3]: 
array([[9, 6, 5],
       [3, 4, 6],
       [6, 7, 9]])
Run Code Online (Sandbox Code Playgroud)

现在执行展平操作:

In [4]: A.flatten()
Out[4]: array([9, 6, 5, 3, 4, 6, 6, 7, 9])
Run Code Online (Sandbox Code Playgroud)

因此,我们可以看到矩阵(又称第二张量)已经变平,这里是逐行的。