如何通过在 tensorflow 中使用 softmax-output-layer 来并行确定多个标签(在神经网络中)?

Posted

技术标签:

【中文标题】如何通过在 tensorflow 中使用 softmax-output-layer 来并行确定多个标签(在神经网络中)?【英文标题】:How can I determine several labels in parallel (in a neural network) by using a softmax-output-layer in tensorflow? 【发布时间】:2016-03-21 02:15:22 【问题描述】:

由于我的硕士研究项目工作,我正在使用 Google 的 tensorflow 库来实现一个神经网络。在那我想确定(在我的前馈神经网络的输出层)并行的几个标签。作为输出层的激活函数,我想使用 softmax 函数。 所以我特别想要的是一个输出是一个看起来像这样的向量:

vec = [0.1, 0.8, 0.1,   0.3, 0.2, 0.5]

这里前三个数字是第一分类三个类别的概率,其他三个数字是第二分类三个类别的概率。所以在这种情况下,我会说标签是:

[ class2 , class3 ]

在第一次尝试中,我尝试通过首先使用 tf.reshape() 将 (1x6) 向量重塑为 (2x3) 矩阵来实现这一点,然后在矩阵 tf.nn.softmax() 上应用 softmax 函数并最后将矩阵重塑回向量。不幸的是,由于重塑,Gradient-Descent-Optimizer 在计算梯度时遇到了问题,所以我尝试了一些不同的方法。

我现在要做的是,我将 (1x6) 向量与一个矩阵相乘,该矩阵的上半部分有一个 (3x3) 单位矩阵,下半部分有一个 (3x3) 零矩阵。 Whit this 我提取了向量的前三个条目。然后我可以应用 softmax 函数并通过另一个矩阵乘法将其恢复为 (1x6) 的旧形式。其他三个向量条目也必须重复此操作。

outputSoftmax  = tf.nn.softmax( vec * [[1,0,0],[0,1,0],[0,0,1],[0,0,0],[0,0,0],[0,0,0]] ) *  tf.transpose( [[1,0,0],[0,1,0],[0,0,1],[0,0,0],[0,0,0],[0,0,0]] )
               + tf.nn.softmax( vec * [[0,0,0],[0,0,0],[0,0,0],[1,0,0],[0,1,0],[0,0,1]] ) *  tf.transpose( [[0,0,0],[0,0,0],[0,0,0],[1,0,0],[0,1,0],[0,0,1]] )

到目前为止它有效,但我不喜欢这种解决方案。 因为在我的实际问题中,我不仅要一次确定两个标签,而且要确定 91 个标签,我必须将上述过程形式重复 91 次。

有没有人有解决方案,我如何获得所需的向量,其中softmax 函数一次仅应用于三个条目,而无需编写“相同”代码 91 次?

【问题讨论】:

【参考方案1】:

您可以应用 tf.split 函数来获得 91 个张量(每个类别一个),然后对每个张量应用 softmax。

classes_split = tf.split(0, 91, all_in_one)

for c in classes_split:
    softmax_class = tf.nn.softmax(c)
    # use softmax_class to compute some loss, add it to overall loss

或者不直接计算损失,您也可以再次将它们连接在一起:

classes_split = tf.split(0, 91, all_in_one)

# softmax each split individually
classes_split_softmaxed = [tf.nn.softmax(c) for c in classes_split]
# Concatenate again
all_in_one_softmaxed = tf.concat(0, classes_split_softmaxed)

【讨论】:

非常感谢您的帮助。我现在有一个很好的解决方案:-)我首先按照你的建议使用 tf.split 函数,然后在每个部分上应用 tf.nn.softmax() ,最后我将它与函数 tf.concat() 合并回来

以上是关于如何通过在 tensorflow 中使用 softmax-output-layer 来并行确定多个标签(在神经网络中)?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过在 tensorflow 中使用 softmax-output-layer 来并行确定多个标签(在神经网络中)?

Softmax回归(使用tensorflow)

win 10如何安装tensorflow

如何理解TensorFlow中的tensor

如何在 laravel 8 中使用 Cascade Soft Delete Trait?

tensorflow中使用tf.ConfigProto()配置Session运行参数&&GPU设备指定