【问题标题】:Different size filters in the same layer with Tensorflow 2.0使用 Tensorflow 2.0 在同一层中使用不同大小的过滤器
【发布时间】:2019-08-10 02:51:20
【问题描述】:

我正在 Udemy 上一门关于 Tensorflow 2.0 的课程,并将其应用于图像数据集。无论如何 - 类代码库中的典型卷积层如下所示:

model.add(tf.keras.layers.Conv2D(filters=32, kernel_size=3, padding="same", activation="relu"))

是否可以在同一层添加多个过滤器,例如:kernel_size=2kernel_size=3kernel_size=4kernel_size=5

请注意,我想知道在TF2.0 中这是如何完成的

编辑:我没有将问题限制在仅 conv2d 层。

【问题讨论】:

    标签: python tensorflow machine-learning computer-vision


    【解决方案1】:

    根据documentation 中提到的 Conv2D 层的内核大小参数的描述,您不能添加具有不同内核大小或步幅的多个过滤器。

    此外,具有不同大小内核的卷积将产生不同高度和宽度的输出。 假设对称核的输出大小的通用公式由

    给出

    (X−K+2P)/S+1

    • 其中 X 是输入高度/宽度
    • K 是内核大小
    • P 是零填充
    • S 是步长

    因此,假设您保持零填充和步幅相同,您不能在 Conv2D 层中拥有多个大小不同的内核。

    但是,您可以使用tf.keras.Model API 在同一输入上多次使用 Conv2D,然后在堆叠它们之前裁剪或使用零填充来匹配不同输出的尺寸。

    例如。

    inputs = tf.keras.Input(shape=(H,W,))
    x1 = tf.keras.layers.Conv2D(filters=32, kernel_size=3)(inputs)
    x2 = tf.keras.layers.Conv2D(filters=16, kernel_size=5)(inputs)
    #match dimensions (height and width) of x1 or x2 here 
    x3 = tf.keras.layers.Concatenate(axis=-1)[x1,x2]
    

    使用Zeropadding2DCropping2D 匹配尺寸。

    【讨论】:

    • 这里这家伙声称在同一层中有多个宽度过滤器 - 如果我理解正确:wildml.com/2015/12/… 页面中有代码链接。我还没有弄清楚。拥有多个层与拥有具有所有功能的多个过滤器不同 - 我认为。
    • 在我提供的链接的代码中-如果您查看“train.py”-过滤器大小的默认值(在标志中)是“3,4,5”...
    • 这家伙所做的和我建议的差不多。引用他的话,“请记住,我们使用不同大小的过滤器。因为每个卷积产生不同形状的张量,我们需要遍历它们,为它们中的每一个创建一个层,然后将结果合并到一个大特征向量中。”唯一的区别是他在连接之前使用最大池而不是裁剪或零填充。如果您不限于 Conv2d,您也可以使用他的方法。
    猜你喜欢
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 2021-10-10
    相关资源
    最近更新 更多