TensorFlow如何训练内核?

时间:2018-02-20 00:00:31

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

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

1 个答案:

答案 0 :(得分:0)

您应该阅读convolutional layers的基本原则:

  

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

     

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

     

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

因此,实质上,每个[filter_height, filter_width]过滤器将匹配输入中相同大小的所有修补程序,并为每个修补程序生成一个数字。某些修补程序可以跳过或添加,具体取决于stridepadding设置。在向后传递中,将针对所有这些过滤器更新过滤器,即,它在整个输入上进行训练。

,例如stride=1padding=2卷积:

conv