这是一个非常基本的张量流问题,但我还没有在文档中看到明确的解释。在examples on the tensorflow site之后,我们基本上连接了这两个层:
conv1 = tf.layers.conv2d(
inputs=input_layer,
filters=32,
kernel_size=[5, 5],
padding="same",
activation=tf.nn.relu)
此时的形状为(28, 28, 32)
。
conv2 = tf.layers.conv2d(
inputs=conv1,
filters=64,
kernel_size=[5, 5],
padding="same",
activation=tf.nn.relu)
此时的形状为(28, 28, 64)
。 tensorflow如何使用(28, 28, 32)
并使用2d内核将其转换为(28, 28, 64)
。你能解释一下或指出我的文件吗?第二层的输出尺寸何时更小,比如说
conv2 = tf.layers.conv2d(
inputs=conv1,
filters=8,
kernel_size=[5, 5],
padding="same",
activation=tf.nn.relu)
tensorflow如何将32个维度合并为8个?
答案 0 :(得分:2)
当输入和输出中有1个滤波器(=通道)时,您将获得一个5x5卷积内核,用于计算像素 (x,y)的输出< / em> 通过获取内核的Hadamard(元素方面)产品和 输入[x - 2:x + 3,y - 2:y + 3] < / strong>然后取得所得到的5x5矩阵的总和,最后在你的情况下应用激活函数(tf.nn.relu()
。)由于其中一些坐标指向输入之外,那么padding="SAME"
开始发挥作用,为了计算,零被用作外部位置的虚拟元素。您的网络将学习内核中的权重。
现在让我们假设您在输入中有2个过滤器,在输出中有1个过滤器。然后你有两个内核,输出将是应用于每个输入通道的上述两个独立操作的结果的 sum 。
如果输入中有1个滤波器,输出中有2个滤波器,那么再次有两个内核,并且每个像素的两个输出通道将使用相应的单独生成内核。
现在大跳跃:如果输入中有 k 过滤器,输出中有 n 过滤器,然后你要学习 (k * n) 不同的内核,每个 n 输出中的像素将计算为每个输入通道上 k 单独卷积的总和。所有 (k * n) 内核都将由网络学习。