Python 关于'的机制/行为;softmax_cross_entropy_with_logits';张量流函数

Python 关于'的机制/行为;softmax_cross_entropy_with_logits';张量流函数,python,tensorflow,softmax,Python,Tensorflow,Softmax,:) 嗨,伙计们 现在,我正在使用tensorflow进行多热分类 如果使用softmax_cross_entropy_with_logits,则损失函数会增加(例如损失:50->损失:190000->损失:2138712811->…) 因此,我想用逻辑来阐明softmax_交叉熵_的机制 def imitation_SCEwL(logits, labels): _y = tf.nn.softmax(logits) _y = tf.clip_by_value(_y, 1e-10, 1.0

:)

嗨,伙计们

现在,我正在使用tensorflow进行多热分类

如果使用softmax_cross_entropy_with_logits,则损失函数会增加(例如损失:50->损失:190000->损失:2138712811->…)

因此,我想用逻辑来阐明softmax_交叉熵_的机制

def imitation_SCEwL(logits, labels):
  _y = tf.nn.softmax(logits)
  _y = tf.clip_by_value(_y, 1e-10, 1.0)

  cross_entropy = -( labels * tf.log(_y) )
  cross_entropy = tf.reduce_sum(cross_entropy, 1, keep_dims=True)
  cross_entropy = tf.reduce_mean( cross_entropy )

  return cross_entropy
我认为下面的python代码可以用逻辑模拟softmax\u cross\u entropy\u

def imitation_SCEwL(logits, labels):
  _y = tf.nn.softmax(logits)
  _y = tf.clip_by_value(_y, 1e-10, 1.0)

  cross_entropy = -( labels * tf.log(_y) )
  cross_entropy = tf.reduce_sum(cross_entropy, 1, keep_dims=True)
  cross_entropy = tf.reduce_mean( cross_entropy )

  return cross_entropy
但是,正版(在tensorflow中实现)和上述代码之间的行为是不同的

使用上述代码,损失函数收敛

为什么?? 我只更改下面的代码

def loss_softmax_cross_entropy_with_logits(logits, labels):
  _y = tf.nn.softmax_cross_entropy_with_logits(logits, labels)
  cross_entropy = tf.reduce_mean(_y)

  return cross_entropy

逻辑的基本思想是正确的,但在
simulation\u SCEwL
函数中调用softmax时,应指定“dim”

请参阅以下代码以计算损失: 1.numpy实现

def xent(features, labels, dim=-1):
  if dim is -1:
    dim = len(features.shape) - 1
  one_only_on_dim = list(features.shape)
  one_only_on_dim[dim] = 1
  e = np.exp(features - np.reshape(
      np.amax(
        features, axis=dim), one_only_on_dim))
  probs = e / np.reshape(np.sum(e, axis=dim), one_only_on_dim)
  l = -np.sum(labels * np.log(probs + 1.0e-20), axis=dim)
  return l
  • tensorflow本机实现
  • “”

  • 函数的修订版本
  • “”

    我测试了这些函数的所有损失值是否相等。如果他们不为你工作,请告诉我

    def imitation_SCEwL(logits, labels, dim=-1):
      _y = tf.nn.softmax(logits, dim=dim)
      cross_entropy = labels * (-tf.log(_y))
      cross_entropy = tf.reduce_sum(cross_entropy, 1, keep_dims=True)
      retval = sess.run(cross_entropy)
      return retval