该sequence_Loss模块的source_code有需要他们列出他们作为产出,目标和权重三个参数.
输出和目标是不言自明的,但我希望更好地理解weight参数是什么?
另一件让我感到困惑的事情是,它表明它targets应该length与输出相同,它们究竟是什么意思是张量的长度?特别是如果它是一个三维张量.
我们在课堂上使用了这个,我们的教授说我们可以只传递正确形状的(评论说“与 logits 长度相同的一维批量大小的浮点张量列表”)。这对理解他们的意思没有帮助,但也许它会帮助你让你的代码运行。为我工作。
这段代码应该可以解决问题[tf.ones(batch_size, tf.float32) for _ in logits]:
编辑:来自 TF 代码:
for logit, target, weight in zip(logits, targets, weights):
if softmax_loss_function is None:
# TODO(irving,ebrevdo): This reshape is needed because
# sequence_loss_by_example is called with scalars sometimes, which
# violates our general scalar strictness policy.
target = array_ops.reshape(target, [-1])
crossent = nn_ops.sparse_softmax_cross_entropy_with_logits(
logit, target)
else:
crossent = softmax_loss_function(logit, target)
log_perp_list.append(crossent * weight)
Run Code Online (Sandbox Code Playgroud)
传递的权重乘以该特定 logit 的损失。所以我想如果你想格外认真地对待某个特定的预测,你可以将权重增加到 1 以上。
| 归档时间: |
|
| 查看次数: |
1189 次 |
| 最近记录: |