【问题标题】:Pytorch apply operation to some rows but not allPytorch 将操作应用于某些行但不是全部
【发布时间】:2020-10-23 18:27:16
【问题描述】:

我正在尝试对张量的某些行应用 softmax 函数,但问题是我的某些行具有所有 -inf 值。因此,这些行上的 softmax 会输出 NaN,这会导致模型后期出现问题。

因此,我想创建一个将 softmax 应用于一行的函数,除非 in 全部为 -inf。在这种情况下,它输出一个零向量。有什么简单的方法可以做到这一点?

【问题讨论】:

  • 在这样做之前,您应该先问问自己为什么会以-inf 结尾。如果这是由于培训而发生的,那么您在其他地方遇到了需要解决的问题。如果它们已经存在,则应在训练之前将它们从数据集中删除 - 这是标准做法。

标签: python deep-learning pytorch torchtext


【解决方案1】:

在 softmax 之后将所有 all nan 的行设置为 0 是否适合您?这样可以确保不会覆盖任何意外的 nan。

import numpy as np
import torch
import torch.nn.functional as F

array = np.arange(25, dtype=np.float32).reshape((5, 5))
array[3, ...] *= -np.inf

# [[  0.   1.   2.   3.   4.]
#  [  5.   6.   7.   8.   9.]
#  [ 10.  11.  12.  13.  14.]
#  [-inf -inf -inf -inf -inf]
#  [ 20.  21.  22.  23.  24.]]

array = torch.tensor(array)
array = F.softmax(array, dim=1)
mask = array.isnan().all(dim=1)
array[mask, ...] = 0
print(array)

# tensor([[0.0117, 0.0317, 0.0861, 0.2341, 0.6364],
#         [0.0117, 0.0317, 0.0861, 0.2341, 0.6364],
#         [0.0117, 0.0317, 0.0861, 0.2341, 0.6364],
#         [0.0000, 0.0000, 0.0000, 0.0000, 0.0000],
#         [0.0117, 0.0317, 0.0861, 0.2341, 0.6364]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 2018-05-06
    • 2021-12-26
    • 1970-01-01
    • 2012-07-25
    • 2015-09-09
    • 1970-01-01
    相关资源
    最近更新 更多