【问题标题】:How does TensorFlow train kernels?TensorFlow 如何训练内核?
【发布时间】:2018-02-21 02:32:32
【问题描述】:

TensorFlow 的 API 描述了函数 tf.nn.conv2d(),它接受过滤器大小的参数:[filter_height, filter_width, in_channel, out_channel]。因此,如果我使用 mnist 数据集并在显示数字“5”的图像上运行网络,过滤器是否会在 5 的下部圆形碗上进行训练?还是只是在图像的多个部分上进行训练? conv2d 中的过滤器将如何以及如何训练?

【问题讨论】:

    标签: python tensorflow computer-vision conv-neural-network convolution


    【解决方案1】:

    你应该阅读convolutional layers的基本原理:

    每个过滤器在空间上都很小(沿宽度和高度),但会延伸到输入体积的整个深度。例如,ConvNet 第一层上的典型过滤器的大小可能为 5x5x3(即 5 个像素的宽度和高度,以及 3 个像素,因为图像的深度为 3,即颜色通道)。

    在前向传播过程中,我们在输入体积的宽度和高度上滑动(更准确地说,卷积)每个过滤器,并计算过滤器条目与任意位置的输入之间的点积。当我们在输入体积的宽度和高度上滑动过滤器时,我们将生成一个二维激活图,该图给出了该过滤器在每个空间位置的响应。

    直观地说,网络将学习过滤器,当他们看到某种类型的视觉特征时激活过滤器,例如第一层上某个方向的边缘或某种颜色的斑点,或者最终在更高层上出现整个蜂窝或轮状图案的网络。现在,我们将在每个 CONV 层中拥有一整套过滤器(例如 12 个过滤器),每个过滤器都会产生一个单独的二维激活图。我们将沿深度维度堆叠这些激活图并生成输出体积。

    因此,本质上,每个[filter_height, filter_width] 过滤器将匹配输入中相同大小的所有补丁,并为每个补丁生成一个数字。根据stridepadding 设置,可以跳过或添加一些补丁。在后向传递中,过滤器将为所有这些更新,即,它在整个输入上进行训练。

    例如,这里是stride=1padding=2 卷积:

    【讨论】:

    • 抱歉回复晚了,但要确认一下,您是说,最终,内核会自己学习独特的功能?
    • 取决于“自己”的意思。地面实况标签提供给 CNN。使用此标签计算增量并将其反向传播到所有层,特别是卷积核,以便它们了解某些模式有助于预测。
    • 那么这是否保证每个通过图像的内核都是唯一的?我的意思是,在某些情况下,您会拥有过滤完全相同特征的内核吗?
    • 我明白你的意思。看到这个问题 - stackoverflow.com/a/48103096/712995
    猜你喜欢
    • 2019-04-12
    • 2016-03-09
    • 2020-02-07
    • 2020-08-05
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多