完全卷积网络的每像素softmax

时间:2016-04-25 20:33:08

标签: tensorflow image-segmentation softmax

我正在尝试实现像完全卷积网络这样的东西,其中最后一个卷积层使用过滤器大小1x1并输出'得分'张量。分数张量具有形状[批次,高度,宽度,num_classes]。

我的问题是,张量流中的哪个函数可以对每个像素应用softmax操作,与其他像素无关。 tf.nn.softmax操作似乎不是为了这个目的。

如果没有这样的操作,我想我必须自己写一个。

谢谢!

更新:如果我必须实现自己,我想我可能需要将输入张量重塑为[N,num_claees],其中N =批量x宽x高,并应用tf.nn.softmax,然后重新整形。它有意义吗?

2 个答案:

答案 0 :(得分:4)

将其重塑为2d然后重新塑造它,就像你猜测的那样,是正确的方法。

答案 1 :(得分:1)

您可以使用此功能。

我是通过GitHub搜索找到的。

import tensorflow as tf

"""
Multi dimensional softmax,
refer to https://github.com/tensorflow/tensorflow/issues/210
compute softmax along the dimension of target
the native softmax only supports batch_size x dimension
"""
def softmax(target, axis, name=None):
    with tf.name_scope(name, 'softmax', values=[target]):
        max_axis = tf.reduce_max(target, axis, keep_dims=True)
        target_exp = tf.exp(target-max_axis)
        normalize = tf.reduce_sum(target_exp, axis, keep_dims=True)
        softmax = target_exp / normalize
        return softmax