flatten在keras中的顺序模型中做了什么

时间:2018-02-18 19:39:55

标签: neural-network keras flatten 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'))
Flatten在这里做了什么?

1 个答案:

答案 0 :(得分:3)

看看the relevant documentation,其中包含一个很好的例子:

model = Sequential()
model.add(Conv2D(64, 3, 3,
                 border_mode='same',
                 input_shape=(3, 32, 32)))

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

model.add(Flatten())
在:model.output_shape == (None, 65536)

之后

解释这个最终形状:

  • None就像一个空的占位符,它将等待批量的大小
  • 65536是在输入维度上运行展平的结果:

    `64 * 32 * 32 == 65536     # True`
    

与NumPy的比较

它类似于NumPy的flatten()函数。这是一个小例子:

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]])
  

现在执行展平操作:

In [4]: A.flatten()
Out[4]: array([9, 6, 5, 3, 4, 6, 6, 7, 9])

所以我们可以看到矩阵(a.k.a. rank-two tensor)已被展平,这里是逐行的。