张量流如何连接链接卷积层的维数?

时间:2018-04-11 23:03:35

标签: python tensorflow

这是一个非常基本的张量流问题,但我还没有在文档中看到明确的解释。在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个?

1 个答案:

答案 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) 内核都将由网络学习。