Tensorflow / Keras找到两个最相似的过滤器

问题描述 投票:0回答:1

我有张量流/ keras CNN。它有层,有些是Conv2D。在给定的层中,我想有效地找到Conv2D中最相似的两个过滤器。 layer.weights是一个形状(高度,宽度,深度)filter_count long的列表。我想比较(高度,宽度,深度)中每个元素之间的差异或者sqrt(diff ^ 2)然后求和,因此差值是单个浮点值。

如果T1是thelayer.weights [idx1]而T2是thelayer.weights [idx2],那么比较是tf.sqrt(tf.reduce_sum(tf.squared_difference(T1,T2)))

我想将每个过滤器与每个其他过滤器进行比较,并采用3个最低差异。 (第一个将始终为零,其中T1和T2是相同的张量,自我)

显然我可以做嵌套循环,但这不是功能和漂亮。

是否有一些内置的tensorflow或keras函数可以快速完成并可能在GPU中执行此操作?

tensorflow keras
1个回答
1
投票

从你的描述中不太清楚,但我认为weights的形状是[filter_count,height,width,depth]。如果filter_count沿着不同的轴,则必须相应地修改“reduce_sum”的参数。

您可以使用广播来并行化此过程。

differences = tf.sqrt(
    tf.reduce_sum(
      tf.squared_difference(
        tf.expand_dims(thelayer.weights,0), 
        tf.expand_dims(thelayer.weights,1),

        ),
      (-1,-2,-3)
    )
)

这将导致形状张量[filter_count,filter_count],其中元素differences[i, j]测量滤波器权重i和j之间的差异。

然后,您可以过滤以查找所需的元素。

© www.soinside.com 2019 - 2024. All rights reserved.