gpt4 book ai didi

tensorflow - Keras 2DConvolution 产生不合逻辑的输出张量 - 32x32 图像变成 32xN 特征图,而不是 32x32xN

转载 作者:行者123 更新时间:2023-12-02 20:48:51 27 4
gpt4 key购买 nike

根据我的理解,2D 卷积将 N 个滤波器应用于输入图像,产生 N 个新的“图像”(=特征图)。

如果我们忽略步幅/子采样,则 32x32 图像经过 N 个 channel 的 2D 卷积后将变为 Nx32x32 张量:

Convolution然而,在 Keras 中,32x32 输入会产生 32xN 输出。那么,我的问题是,如何应用降维?这一步是否还涉及另一个隐藏层?

如果是这样,网络是否会失去查看图像原样的能力 - 即 2D 实体?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~

这段代码可以重现我的上述主张:

inputs = Input(shape=(1, 32, 32,))
shared = Convolution2D(nb_filter=10, nb_row=8, nb_col=8, subsample=(1, 1), border_mode='same', activation='relu')(inputs)
print("1 => ", inputs.shape)
print("2 => ", shared.shape)

当我们将 10 个滤镜 (==N) 应用于 32x32 灰度图像时,它会产生结果

1 => (?, 1, 32, 32)

2 => (?, 1, 32, 10)

哪里?是未指定的批量大小,1 是输入 channel 的数量(RGB 为 3,灰度为 1)。

正如预期的那样,输入的形状为 32x32。但是,卷积的输出具有 32xN 维度,而不是 32x32xN

最佳答案

可能是因为输入格式顺序的原因。

来自 Keras 文档 Conv2D 采用此参数

data_format: A string, one of channels_last (default) or channels_first. The ordering of the dimensions in the inputs. channels_last corresponds to inputs with shape (batch, height, width, channels) while channels_first corresponds to inputs with shape (batch, channels, height, width). It defaults to the image_data_format value found in your Keras config file at ~/.keras/keras.json. If you never set it, then it will be "channels_last".

所以你的 (1, 32, 32) 实际上是一个具有 32 个 channel 的 1x32 图像。切换到 (32, 32, 1) 或将 data_format 参数设置为 channels_first

有关更改默认行为的更多信息:https://keras.io/backend/您可以使用 keras.backend.image_data_format() 获取设置,并使用 set_image_data_format(data_format) 设置 channels_firstchannels_last.

之所以有此设置,是因为 Theano 和 TF 处理维度排序的方式不同,并且取决于您使用的支持。

关于tensorflow - Keras 2DConvolution 产生不合逻辑的输出张量 - 32x32 图像变成 32xN 特征图,而不是 32x32xN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43117135/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com