调用以下方法时:
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
这里的原因是什么?我是否将它们初始化为某些价值,例如损失?要么?
答案 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
,反之亦然。