Python 3.x 如何在不使用argmax函数(argmax不可微)的情况下实现多类骰子损失函数?
我正在尝试在tensorflow中实现一个多类骰子丢失函数。因为它是多类骰子,所以我需要将每个类的概率转换为它的一个热形式。例如,如果我的网络输出这些概率:Python 3.x 如何在不使用argmax函数(argmax不可微)的情况下实现多类骰子损失函数?,python-3.x,tensorflow,keras,deep-learning,Python 3.x,Tensorflow,Keras,Deep Learning,我正在尝试在tensorflow中实现一个多类骰子丢失函数。因为它是多类骰子,所以我需要将每个类的概率转换为它的一个热形式。例如,如果我的网络输出这些概率: [0.2,0.6,0.1,0.1](假设4类) 我需要将其转换为: [0 1 0 0] 这可以通过使用tf.argmax后跟tf.one_hot来完成 问题是,tf.argmax不可微,它将抛出一个错误: ValueError: An operation has `None` for gradient. Please make sure t
[0.2,0.6,0.1,0.1](假设4类)
我需要将其转换为:
[0 1 0 0]
这可以通过使用tf.argmax后跟tf.one_hot来完成
问题是,tf.argmax不可微,它将抛出一个错误:
ValueError: An operation has `None` for gradient. Please make sure that all of your ops have a gradient defined (i.e. are differentiable). Common ops without gradient: K.argmax, K.round, K.eval.
如何解决这个问题?我们可以不使用tf.argmax做同样的事情吗?看一看。您不需要进行转换(将[0.2,0.6,0.1,0.1]
转换为[0 1 0]
)。只需将它们作为介于0和1之间的连续值
如果我理解正确,损失函数只是实现预期目标的一个替代项。即使它不一样,只要它是一个好的代理,它就是好的(否则,它是不可微的)
在计算时间内,可以随意使用tf.argmax
来获取实际度量
ValueError: An operation has `None` for gradient. Please make sure that all of your ops have a gradient defined (i.e. are differentiable). Common ops without gradient: K.argmax, K.round, K.eval.