我正在使用Tensorflow学习卷积神经网络。
我对tf.nn.conv2d
有些疑问。它的一个参数是filter
:
形状为[filter_height, filter_width, in_channels, out_channels]的滤波器/内核张量
我不明白out_channels
的含义是什么。
假设输入图像是[1, 3, 3, 1]
。所以大小是3×3,通道数是1。
然后我们有一个滤波器[2, 2, 1, 5]
,这意味着经过滤波后,我们将得到一个大小为2×2(“valid”填充)的图像,具有5个通道。
这5个通道是从哪里来的?根据我的理解,滤波只能生成1个通道。Tensorflow在这里使用了5个不同的滤波函数吗?
回答:
正如你所引用的,tf.nn.conv2d
函数的filter
参数是一个维度为[filter_height, filter_width, in_channels, out_channels]
的4D张量。这个张量代表了out_channels
个维度为filter_height x filter_width
的滤波器堆栈,这些滤波器将应用于具有in_channels
个通道的图像上。
参数filter_height
、filter_width
和out_channels
是由你定义的,而input_channels
则取决于你输入到tf.nn.conv2d
的输入数据。
换句话说,一个维度为[2, 2, 1, 5]
的滤波器张量,代表了5个不同的2×2滤波器,这些滤波器将应用于一个1通道输入上,但你完全可以将其更改为[2, 2, 1, 7]
,或者任何其他能给你带来更好结果的设置。
为了进一步说明,以下gif展示了一个维度为[3, 3, 1, 1]
的张量滤波器在[1, 5, 5, 1]
的图像上进行卷积。这意味着你只有1个滤波器在图像上进行卷积。