我在训练的第一步(或300步左右)后仍然遇到这个错误。任何人都可以指出这种情况发生的原因吗?如果您对我使用的模型感兴趣,请点击这里:
{
"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"
}
对于标签,我首先填充它们以匹配最长长度标签的长度。
答案 0 :(得分:1)
我认为您正在处理语音转文本或类似问题。 当您的模型由RNN / LSTM组成时,Inf和Nan值通常很常见。这使得他们成功实施起来有点困难。 你在这里使用什么样的激活函数/非线性,特别是对于RNN层?
我在训练LSTM时经常观察到Nan和Inf值,主要是由于消失梯度和爆炸梯度问题。我建议使用剪切的RELU功能。在TensorFlow中,您可以使用默认函数 tf.nn.relu6 按值6进行剪辑。您可以编写一个简单的自定义函数,以剪切其他值。
如果您仍然面临同样的问题,请尝试稍微修改架构和参数。可能最初使用2层Bi-LSTM并且可能具有较小的隐藏状态。
希望这会有所帮助。 试试这些,让我知道它是如何工作的。
答案 1 :(得分:0)
它肯定是导致问题的输入的序列长度。显然,序列长度应该比地面实际长度略大。