【问题标题】:How should I handle input data with nan values in TensorFlow?我应该如何在 TensorFlow 中处理具有 nan 值的输入数据?
【发布时间】:2018-02-27 18:57:46
【问题描述】:

我有一个带有 sigmoid 损失 (tf.nn.sigmoid_cross_entropy_with_logits) 和 Adam 优化器 (tf.train.AdamOptimizer) 的多层感知器。我的输入数据有几个特征和一些 nan 特征值。当我将 nan 值替换为 0 时,我会得到一个结果,但是,当我不替换 nan 值时,我会得到 loss=nan。

在 TensorFlow 中处理 nan 值的最佳方法是什么?如何在不将其替换为 0 的情况下将输入数据与 nan 值一起使用?

【问题讨论】:

  • 如果您的数据中有 NaN,则获取 loss == NaN 是预期的行为,因为任何涉及 NaN 的算术运算都会导致 NaN。因此,是的,您必须删除它们。如何做到这一点由您决定,有几种可能性(替换为0只是其中一种)
  • 谷歌“处理缺失值”以了解可能性并尝试找出适用于您的情况的可能性
  • 你不能用 nan 值做有意义的计算。我不知道您的具体应用,但您可能想忽略这些值。如果您想在 tensorflow 图中执行此操作,可以查看 tf.is_nantf.wheretf.boolean_mask
  • 感谢您的 cmets。

标签: tensorflow nan


【解决方案1】:

问题

我怎样才能告诉我的网络忽略一些输入数据。例如当输入数据是nan

回答

这与为输入数据添加掩码非常相似。您希望输入数据通过,nans 归零,但您还想以某种方式向神经网络发出信号以忽略 nans 的位置并注意其他一切。

this question about adding a mask 中,我回顾了如何成功地将蒙版添加到图像中,同时还给出了非图像问题的代码演示。

  • 首先创建一个掩码,1 表示输入中存在数据,0 表示 nan 存在。
  • 其次,清理将 nans 转换为 0 或 0.5 或其他任何值的输入。
  • 第三,将掩码叠加到输入上。如果输入是图像,则蒙版成为另一个颜色通道。

masking question 中的代码显示,当添加掩码时,神经网络能够很好地学习,而当不添加掩码时,它不能很好地学习。

【讨论】:

  • 尽管如此,我更进一步将 nans 转换为 random 数据,以进一步帮助神经网络学习关联具有有意义和无意义数据的掩码。
  • 知道如何将额外的遮罩层输入到模型中吗?您会使用一维卷积层将其与实际数据相结合吗?
  • @Phlogi 使用与您的输入相同的形状,没有深度。因此,例如,如果您的输入是 2d 彩色图像,那么您将有 3d 输入(hwcolor)。如果您的图像部分是 nan,我假设它们在所有颜色通道中都是 nan。所以你的新改进输入是 hwc + hw*1 = hw*(c+1)。如果它是带有一些 nan 词的标记化词的输入,比如 50 个词,每个词嵌入 128 len,那么您的输入是 50*(128+1),1 是 nan 标志。
  • 谢谢,我的数据集具有数字和分类特征。我使用 pandas 创建了掩码,并添加了带有额外交叉特征列 (tf.feature_column.crossed_column) 的 nan 信息。我仍在评估效果。
猜你喜欢
  • 2021-02-20
  • 2020-08-22
  • 2020-04-14
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 2019-04-01
相关资源
最近更新 更多