首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >展平层在Keras中是如何工作的?

展平层在Keras中是如何工作的?
EN

Stack Overflow用户
提问于 2017-05-25 17:29:07
回答 3查看 49.2K关注 0票数 25

我使用的是TensorFlow后端。

我正在依次应用卷积,最大池化,扁平化和致密层。卷积需要3D输入(height、width、color_channels_depth)。

在卷积之后,它变成(height,width,Number_of_filters)。

应用max-pooling后,高度和宽度会发生变化。但是,在应用扁平层之后,到底会发生什么呢?例如,如果flatten之前的输入是(24,24,32),那么它是如何将其展平的?

它是像(24 * 24)一样按顺序排列每个过滤器的身高、体重,还是以其他方式?一个有实际价值的例子将会很受欢迎。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-26 07:09:29

Flatten()操作符从最后一个维度开始展开值(至少对于Theano,它是“频道优先”,而不是像TF那样“频道最后”。我不能在我的环境中运行TensorFlow )。这等同于具有'C‘排序的numpy.reshape

‘C’表示以类似于C的索引顺序读/写元素,最后一个轴的索引变化最快,回到第一个轴的索引变化最慢。

下面是一个独立的示例,演示了使用Keras函数API的Flatten操作符。您应该能够轻松地适应您的环境。

代码语言:javascript
复制
import numpy as np
from keras.layers import Input, Flatten
from keras.models import Model
inputs = Input(shape=(3,2,4))

# Define a model consisting only of the Flatten operation
prediction = Flatten()(inputs)
model = Model(inputs=inputs, outputs=prediction)

X = np.arange(0,24).reshape(1,3,2,4)
print(X)
#[[[[ 0  1  2  3]
#   [ 4  5  6  7]]
#
#  [[ 8  9 10 11]
#   [12 13 14 15]]
#
#  [[16 17 18 19]
#   [20 21 22 23]]]]
model.predict(X)
#array([[  0.,   1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,  10.,
#         11.,  12.,  13.,  14.,  15.,  16.,  17.,  18.,  19.,  20.,  21.,
#         22.,  23.]], dtype=float32)
票数 46
EN

Stack Overflow用户

发布于 2019-01-15 07:33:48

展平张量意味着删除除一个维度之外的所有维度。

Keras中的扁平层重塑张量,使其具有与张量中包含的元素数量相等的形状。

这与创建一个一维元素数组是一样的。

例如,在VGG16模型中,您可能会发现它很容易理解:

代码语言:javascript
复制
>>> model.summary()
Layer (type)                     Output Shape          Param #
================================================================
vgg16 (Model)                    (None, 4, 4, 512)     14714688
________________________________________________________________
flatten_1 (Flatten)              (None, 8192)          0
________________________________________________________________
dense_1 (Dense)                  (None, 256)           2097408
________________________________________________________________
dense_2 (Dense)                  (None, 1)             257
===============================================================

注意flatten_1层的形状是(无,8192),其中8192实际上是4*4*512。

PS,None表示任何维度(或动态维度),但您通常可以将其理解为1。您可以在here中找到更多详细信息。

票数 12
EN

Stack Overflow用户

发布于 2017-05-26 03:21:10

它是顺序的,如24*24*32,并重塑它,如以下代码所示。

代码语言:javascript
复制
def batch_flatten(x):
    """Turn a nD tensor into a 2D tensor with same 0th dimension.
    In other words, it flattens each data samples of a batch.
    # Arguments
        x: A tensor or variable.
    # Returns
        A tensor.
    """
    x = tf.reshape(x, tf.stack([-1, prod(shape(x)[1:])]))
    return x
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44176982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档