深度学习入门,Keras Conv2D类参数详解

image-20211029211449671

图4: ResNet“残差模块”使用 1×1 和 3×3 过滤器进行降维。 这有助于用更少的参数使整个网络更小。

那么,您应该如何选择 filter_size ? 首先,检查你的输入图像——它是否大于 128×128? 如果是这样,请考虑使用 5×5 或 7×7 内核来学习更大的特征,然后快速减少空间维度——然后开始使用 3×3 内核:

model.add(Conv2D(32, (7, 7), activation=“relu”))

model.add(Conv2D(32, (3, 3), activation=“relu”))

如果您的图像小于 128×128,您可能需要考虑坚持使用小点的 1×1 和 3×3 过滤器。

strides

==================================================================

strides 参数是一个 2 元组整数,指定沿输入体积的 x 和 y 轴的卷积“步长”。

strides 值默认为 (1, 1) ,这意味着:

  • 给定的卷积滤波器应用于输入体积的当前位置

  • 过滤器向右移动 1 个像素,然后过滤器再次应用于输入体积

  • 这个过程一直执行,直到我们到达体积的最右侧边界,我们将过滤器向下移动一个像素,然后从最左侧重新开始

通常,您会将 strides 参数保留为默认 (1, 1) 值; 但是,您可以偶尔将其增加到 (2, 2) 以帮助减小输出体积的大小(因为滤波器的步长较大)。 通常,您会看到 2×2 步幅作为最大池化的替代:

model.add(Conv2D(128, (3, 3), strides=(1, 1), activation=“relu”))

model.add(Conv2D(128, (3, 3), strides=(1, 1), activation=“relu”))

model.add(Conv2D(128, (3, 3), strides=(2, 2), activation=“relu”))

在这里我们可以看到前两个 Conv2D 层的步幅为 1×1。 最终的 Conv2D 层; 然而,它代替了最大池化层,而是通过跨步卷积减少了输出体积的空间维度。

2014 年,Springenber 等人。 发表了一篇题为 Striving for Simplicity: The All Convolutional Net 的论文,该论文证明在某些情况下用跨步卷积替换池化层可以提高准确性。

ResNet 是一种流行的 CNN,已经接受了这一发现——如果您查看 ResNet 实现的源代码(或自己实现它),您会看到 ResNet 响应跨步卷积而不是最大池化以减少两者之间的空间维度 残余模块。

padding

==================================================================

img

图5: 应用于带有填充的图像的 3×3 内核。 Keras Conv2D 填充参数接受“valid”(无填充)或“same”(填充 + 保留空间维度)。 此动画贡献给 StackOverflow。

Keras Conv2D 类的填充参数可以采用以下两个值之一: valid 或 same 。 使用有效参数,输入体积不会被零填充,并且空间维度可以通过卷积的自然应用减少。 下面的例子自然会减少我们体积的空间维度:

model.add(Conv2D(32, (3, 3), padding=“valid”))

如果您想要保留体积的空间尺寸,以便输出体积大小与输入体积大小匹配,那么您需要为 padding 提供“same”的值:

model.add(Conv2D(32, (3, 3), padding=“same”))

虽然默认的 Keras Conv2D 值是有效的,但我通常会将其设置为网络中大多数层的相同值,

然后通过以下任一方式减少我的体积的空间维度:

​ 最大池化

​ - 跨步卷积

我建议您也使用类似的方法来填充 Keras Conv2D 类。

data_format

=======================================================================

image-20211029211617490

图 6: Keras 作为高级框架,支持多个深度学习后端。 因此,它包括对“channels last”和“channels last”通道排序的支持。

Conv2D 类中的数据格式值可以是 channels_last 或 channels_first : Keras 的 TensorFlow 后端使用最后排序的通道。 Theano 后端使用通道优先排序。

由于以下两个原因,您通常不必像 Keras 那样触及此值:

​ - 您很有可能使用 TensorFlow 后端到 Keras

​ - 如果没有,你可能已经更新了你的 ~/.keras/keras.json 配置文件来设置你的后端和相关的频道排序

我的建议是永远不要在你的 Conv2D 类中明确设置 data_format ,除非你有很好的理由这样做。

dilation_rate

=========================================================================

image-20211029211658301

Figure 7: Keras 深度学习 Conv2D 参数 dilation_rate 接受一个 2 元组整数来控制膨胀卷积。

Conv2D 类的 dilation_rate 参数是一个二元组整数,控制膨胀卷积的膨胀率。 扩张卷积是一种基本卷积,仅应用于具有定义间隙的输入体积,如上图 7 所示。 您可以在以下情况下使用扩张卷积:

​ 1、您正在处理更高分辨率的图像,但细粒度的细节仍然很重要

​ 2、 您正在构建一个参数较少的网络

activation

================================================================&#

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值