在 0 或 1 TensorFlow 中映射网络的输出值
Map the output values of a network in 0 or 1 TensorFlow
我有一个输出层大小为 [3, 13000, 3, 1] (B,H,W,C)
的网络,我使用 tf.reduce_mean
对其进行了转换以获得输出大小 [3, 13000, 1]
。
图形上是这样
对吗?
我的标签大小为 [3, 13000, 1]
作为我的新输出,所有值都是 0 或 1。
现在我必须用标签计算损失。为了计算这个损失,我使用这个公式 tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=predict, labels=y))
,但首先我必须将输出中的所有值转换为 0 或 1。我使用的是 tf.nn.softmax
函数,但我得到的都是 1.
如何实现一个函数,将阈值以下的所有值映射到 0 和 1 以上的值?而这个阈值应该是例如(max value - min value) / 2
。这也适用于反向传播步骤中的梯度。
由于您的预测是单个 class 值,因此当您对其应用 softmax
时,无论值如何,它都将始终为 1:(exp(predict)/sum(exp(predict)) = exp(predict)/exp(predict) = 1)
。将输入转换为 one-hot
并使模型预测两个 classes: [0, 1] 或改用 sigmoid cross entropy
。
我有一个输出层大小为 [3, 13000, 3, 1] (B,H,W,C)
的网络,我使用 tf.reduce_mean
对其进行了转换以获得输出大小 [3, 13000, 1]
。
图形上是这样
对吗?
我的标签大小为 [3, 13000, 1]
作为我的新输出,所有值都是 0 或 1。
现在我必须用标签计算损失。为了计算这个损失,我使用这个公式 tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=predict, labels=y))
,但首先我必须将输出中的所有值转换为 0 或 1。我使用的是 tf.nn.softmax
函数,但我得到的都是 1.
如何实现一个函数,将阈值以下的所有值映射到 0 和 1 以上的值?而这个阈值应该是例如(max value - min value) / 2
。这也适用于反向传播步骤中的梯度。
由于您的预测是单个 class 值,因此当您对其应用 softmax
时,无论值如何,它都将始终为 1:(exp(predict)/sum(exp(predict)) = exp(predict)/exp(predict) = 1)
。将输入转换为 one-hot
并使模型预测两个 classes: [0, 1] 或改用 sigmoid cross entropy
。