【问题标题】:what does flatten do in sequential model in kerasflatten 在 keras 的顺序模型中做了什么
【发布时间】:2018-02-18 19:39:55
【问题描述】:

我正在使用顺序模型研究 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 在这里做什么?

【问题讨论】:

    标签: neural-network keras flatten keras-layer


    【解决方案1】:

    看看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 是在输入维度上运行 flatten 的结果:

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

    所以我们可以看到矩阵(也就是 rank-2 张量)已经被展平,这里是逐行的。

    【讨论】:

      猜你喜欢
      • 2018-07-11
      • 2021-01-09
      • 2020-01-05
      • 1970-01-01
      • 1970-01-01
      • 2020-12-09
      • 2018-08-24
      • 2021-08-20
      • 2018-09-22
      相关资源
      最近更新 更多