输出层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
的默认调用一起使用
我在 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
的默认调用一起使用