【问题标题】:CTC LossTensor is inf or nan: Tensor had Inf values?CTC LossTensor 是 inf 或 nan:张量有 Inf 值吗?
【发布时间】:2018-03-05 05:12:03
【问题描述】:

我在训练的第一步(或大约 30000 步之后)一直遇到这个错误。谁能指出发生这种情况的原因?如果你对我使用的模型感兴趣,这里是:

{
  "network":[
    {"layer_type": "input_layer", "name": "inputs", "shape": [-1, 168, 168, 1]},
    {"layer_type": "l2_normalize", "axis": [1, 2]},
    {"layer_type": "conv2d", "num_filters": 16, "kernel_size": [3, 3]},
    {"layer_type": "max_pool2d", "pool_size": [2, 2]},
    {"layer_type": "l2_normalize", "axis": [1, 2]},
    {"layer_type": "conv2d", "num_filters": 32, "kernel_size": [3, 3]},
    {"layer_type": "max_pool2d", "pool_size": [2, 2]},
    {"layer_type": "l2_normalize", "axis": [1, 2]},
    {"layer_type": "dropout", "keep_prob": 0.5},
    {"layer_type": "conv2d", "num_filters": 64, "kernel_size": [3, 3]},
    {"layer_type": "max_pool2d", "pool_size": [2, 2]},
    {"layer_type": "l2_normalize", "axis": [1, 2]},
    {"layer_type": "dropout", "keep_prob": 0.5},
    {"layer_type": "collapse_to_rnn_dims"},
    {"layer_type": "birnn", "num_hidden": 128, "cell_type": "LSTM"},
    {"layer_type": "birnn", "num_hidden": 128, "cell_type": "LSTM"},
    {"layer_type": "birnn", "num_hidden": 128, "cell_type": "LSTM"},
    {"layer_type": "dropout", "keep_prob": 0.5}
  ],
  "output_layer": "ctc_decoder",
  "loss": "ctc",
  "metrics": ["label_error_rate"],
  "learning_rate": 0.001,
  "optimizer": "adam"
}

至于标签,我先填充它们以匹配最长标签的长度。

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    这绝对是导致问题的输入的序列长度。显然,序列长度应该比地面实况长度大一点。

    【讨论】:

      【解决方案2】:

      我假设您正在处理 Speech-to-Text 或类似问题。 当您的模型由 RNN / LSTM 组成时,Inf 和 Nan 值通常很常见。这就是使它们难以成功实施的原因。 你在这里使用什么样的激活函数/非线性,特别是对于 RNN 层?

      我在训练 LSTM 时经常观察到 Nan 和 Inf 值,主要是由于梯度消失和梯度爆炸问题。我建议使用裁剪的 RELU 函数。在 TensorFlow 中,您可以使用默认函数 tf.nn.relu6 按值 6 进行剪辑。您可以编写一个简单的自定义函数,通过其他值进行剪辑。

      如果您仍然面临同样的问题,请尝试稍微修改架构和参数。最初可能使用 2 层 Bi-LSTM,并且可能具有较小的隐藏状态。

      希望这会有所帮助。 试试这些,让我知道它是如何工作的。

      【讨论】:

      • 我没有修改 LSTMCells 使用的激活函数,所以我使用的是默认的 tanh。至于我正在处理的问题,它是一个离线手写识别问题。不幸的是,我正在训练的机器坏了,所以我还不能真正尝试一下。如果您有兴趣尝试一下,这里是repository 的链接。您可能需要先下载 IAM 离线手写数据集。
      • 我首先使用我拥有的测试数据为我自己的机器尝试了relu6,但我仍然遇到同样的错误。当我增加输入序列长度使其比标签长度大一点时,错误似乎不再出现。我会尝试更多的东西。
      • 我现在遇到了这个问题。 stackoverflow.com/questions/49143593/…
      猜你喜欢
      • 2011-10-29
      • 2014-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-29
      • 1970-01-01
      相关资源
      最近更新 更多