如何避免在Keras的Flatten()

时间:2017-10-05 04:49:49

标签: deep-learning convolution keras-2

我正在使用Keras进行图像分类。 有我的模特:



model = Sequential()

model.add(Conv2D(filters = 8, kernel_size = (3,3),padding = 'Same', 
                 activation ='relu', input_shape = (64,64,3)))
model.add(MaxPool2D(pool_size=(2,2)))



model.add(Conv2D(filters = 16, kernel_size = (3,3),padding = 'Same', 
                 activation ='relu'))
model.add(MaxPool2D(pool_size=(2,2)))

model.add(Conv2D(filters = 32, kernel_size = (3,3),padding = 'Same', 
                 activation ='relu'))
model.add(MaxPool2D(pool_size=(2,2)))


model.add(Dropout(0.2))


model.add(Flatten())
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(3, activation = "sigmoid"))




我想避免使用Flatten(),因为在这种情况下我们会丢失一些空间信息。我看了一些教程,但他们都使用了Flatten()。是否可以使用像deconvolution这样的东西?

1 个答案:

答案 0 :(得分:0)

Flatten很好。

"空间"从某种意义上说,Flatten进入Dense层的关系是保留的。因为来自特定位置的所有值都映射到密集层中的相同权重。因此,每个点都在数据集中一致地映射。 "空间"在卷积层中映射的关系正在寻找局部模式,并且在这些层中保持输入不变是很重要的。