Tensorflow ValueError:仅使用命名参数调用`sparse_softmax_cross_entropy_with_logits`

时间:2017-12-20 15:36:42

标签: python tensorflow neural-network lstm cross-entropy

调用以下方法时:

losses = [tf.nn.sparse_softmax_cross_entropy_with_logits(logits, labels)
          for logits, labels in zip(logits_series,labels_series)]

我收到以下ValueError:

ValueError: Only call `sparse_softmax_cross_entropy_with_logits` with named arguments (labels=..., logits=..., ...)

反对这个:

[tf.nn.sparse_softmax_cross_entropy_with_logits(logits, labels)

根据 nn_ops.py 的文档,我需要确保将登录名和标签初始化为例如:

  

def _ensure_xent_args(name,sentinel,labels,logits):#确保   所有参数都作为命名参数传递。如果是哨兵   不是没有:       引发ValueError("仅用"来调用%s                        "命名参数(labels = ...,logits = ...,...)" %name)如果标签为None或logits为None:       提高ValueError("必须提供标签和logits。")

     

Logits = X,labels = Y

这里的原因是什么?我是否将它们初始化为某些价值,例如损失?要么?

1 个答案:

答案 0 :(得分:1)

原因是tf.nn.sparse_softmax_cross_entropy_with_logits的第一个参数是 _sentinel

  

_sentinel:用于防止位置参数。内部,不要使用。

此API鼓励您命名您的参数,如下所示:

tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=labels)

...这样您就不会意外地将logits传递给labels,反之亦然。