在密集层之间展平操作

时间:2018-03-16 22:51:07

标签: deep-learning keras keras-layer

在Keras实现中,我曾经看到最后两个完全连接的层定义如下

outX = Dense(300, activation='relu')(outX)
outX = Flatten()(outX)
predictions = Dense(1,activation='linear')(outX)

在两个Dense图层之间有Flatten图层,为什么我们必须在两个完全连接的图层之间添加一个Flatten操作。这总是需要吗?

1 个答案:

答案 0 :(得分:2)

简答:展平图层没有任何参数可供学习。但是,向模型添加Flatten图层可以增加模型的学习参数。

示例:尝试找出这两个模型之间的区别:

1)没有Flatten

inp = Input(shape=(20,10,))
A = Dense(300, activation='relu')(inp)
#A = Flatten()(A) 
A = Dense(1, activation='relu')(A)
m = Model(inputs=inp,outputs=A)
m.summary()

输出:

input_9 (InputLayer)         (None, 20, 10)            0         
dense_20 (Dense)             (None, 20, 300)           3300      
dense_21 (Dense)             (None, 20, 1)             301       

Total params: 3,601
Trainable params: 3,601
Non-trainable params: 0

2)Flatten

inp = Input(shape=(20,10,))
A = Dense(300, activation='relu')(inp)
A = Flatten()(A) 
A = Dense(1, activation='relu')(A)
m = Model(inputs=inp,outputs=A)
m.summary()

输出:

input_10 (InputLayer)        (None, 20, 10)            0 
dense_22 (Dense)             (None, 20, 300)           3300      
flatten_9 (Flatten)          (None, 6000)              0         
dense_23 (Dense)             (None, 1)                 6001      

Total params: 9,301
Trainable params: 9,301
Non-trainable params: 0

最后,添加或不添加Flatten图层取决于手头的数据。拥有更多参数可以导致更准确的模型,或者可能导致过度拟合。所以,答案应该是:"同时应用两者,选择最佳"