【问题标题】:What is the best way to top k pool elements instead of only the max one in Tensorflow?在 Tensorflow 中,顶级 k 池元素而不是仅最大一个的最佳方法是什么?
【发布时间】:2016-07-16 07:29:28
【问题描述】:

现在tensorflow中的最大池化函数是

tf.nn.max_pool(value, ksize, strides, padding, name=None) 回报: 类型为 tf.float32 的张量。最大池化输出张量。

我想要一个 max_pool 的扩展版本,比如

tf.nn.top_k_pool(value, ksize, strides, padding, k=1, name=None) 对输入执行前 k 个池化。 参数: value:一个 4-D 张量,形状为 [batch, height, width, channels],类型为 tf.float32。 ksize:长度 >= 4 的整数列表。输入张量的每个维度的窗口大小。 strides:长度 >= 4 的整数列表。输入张量的每个维度的滑动窗口的步幅。 padding:一个字符串,“VALID”或“SAME”。填充算法。 k:0-D int32 张量。要在每个池中查找的顶部元素的数量。 name:操作的可选名称。 回报: 类型为 tf.float32 的张量。最大池化输出张量。将有一个额外的维度来保存前 k 个值。

我知道我可以在 https://www.tensorflow.org/versions/r0.7/how_tos/adding_an_op/index.html 之后扩展 tensorflow 操作

我想知道是否有更简单的方法来实现这一点。

【问题讨论】:

  • 你找到解决办法了吗?

标签: python tensorflow


【解决方案1】:

usd tf.reshape(), tf.matrix_transpose(), tf.nn.top_k(sorted=False) 和 tf.nn.conv2d() 中的 'data_format' 参数,详见http://www.infocool.net/kb/OtherCloud/201703/318346.html

【讨论】:

    【解决方案2】:

    这是一个使用top_k获取通道的最大k个激活的函数。您可以修改它以适合您的目的:

    def make_sparse_layer(inp_x,k, batch_size=None):
    
        in_shape = tf.shape(inp_x)
        d = inp_x.get_shape().as_list()[-1]
        matrix_in = tf.reshape(inp_x, [-1,d])
        values, indices = tf.nn.top_k(matrix_in, k=k, sorted=False)
        out = []
        vals = tf.unpack(values, axis=0, num=batch_size)
        inds = tf.unpack(indices, axis=0, num=batch_size)
        for i, idx in enumerate(inds):
            out.append(tf.sparse_tensor_to_dense(tf.SparseTensor(tf.reshape(tf.cast(idx,tf.int64),[-1,1]),vals[i], [d]), validate_indices=False ))
        shaped_out = tf.reshape(tf.pack(out), in_shape)
        return shaped_out 
    

    【讨论】:

      【解决方案3】:

      【讨论】:

      • 你能展示一段代码来实现它吗?事实上,我已经看过这个函数,但我无法想象一种将它实现为池的方法,因为我必须处理池窗口。
      猜你喜欢
      • 2019-12-04
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      • 1970-01-01
      • 2012-10-07
      • 1970-01-01
      • 2022-06-30
      • 2012-05-22
      相关资源
      最近更新 更多