输出层softmax函数的问题

Problem wih softmax function in the output layer

我在 a 中存储了一个张量,如下所示:

<tf.Tensor: shape=(5, 1), dtype=float32, numpy=
array([[0.1 ],
       [0.2 ],
       [0.4 ],
       [0.15],
       [0.15]], dtype=float32)>

当我对其应用 softmax 函数时,

a_tf = tf.nn.softmax(a)

我正在得到如下所示的张量

<tf.Tensor: shape=(5, 1), dtype=float32, numpy=
array([[1.],
       [1.],
       [1.],
       [1.],
       [1.]], dtype=float32)>

尽管我希望 0 和 1 之间的归一化值加起来为 1。

的确,当我使用softmax定义代码时

a_tf = out_put = (tf.exp(a)) / (tf.reduce_sum(tf.exp(a)))

我得到了预期的张量:

<tf.Tensor: shape=(5, 1), dtype=float32, numpy=
array([[0.1799347 ],
       [0.19885859],
       [0.24288644],
       [0.18916014],
       [0.18916014]], dtype=float32)>

有人可以解释为什么第一个代码片段没有按预期工作吗?

您的输入数组(或张量)的形状为 (5, 1),默认情况下,tf.nn.softmax 在最后一个维度上运行。您现在可能会看到哪里出了问题,因为最后一个维度是一个单独的元素,然后使用 softmax 将其归一化为 1.0

您有两个选择:

  • axis=0 指定为 tf.nn.softmax,以便在第一个而不是最后一个维度上执行操作。
  • 将数组重塑为 (1, 5) 的形状,这将与对 tf.nn.softmax
  • 的默认调用一起使用