拟合Keras模型会产生错误“恒定折叠失败:无效参数:不支持的类型:21”

时间:2019-04-29 11:07:45

标签: python tensorflow machine-learning keras nlp

我正在遵循https://www.tensorflow.org/alpha/tutorials/load_data/text中的示例 加载我自己的数据集并对该句子进行二进制分类(TensorFlow 2.0)。 我对示例所做的唯一更改是使用的数据集(我来自https://github.com/UKPLab/emnlp2017-claim-identification/tree/master/src/main/python),并且由于标签只能是0或1,因此我将损失函数更改为binary_crossentropy,优化器到RMSprop。 当拟合与教程中建议的模型相同的Keras模型时,我不断收到以下错误:

2019-04-29 13:51:15.609297: E tensorflow/core/grappler/optimizers/meta_optimizer.cc:495] constant folding failed: Invalid argument: Unsupported type: 21
2019-04-29 13:51:15.882000: E tensorflow/core/grappler/optimizers/meta_optimizer.cc:495] constant folding failed: Invalid argument: Unsupported type: 21

在这些印刷品之间,贴合过程仍在推进,如:

662/4508 [===>..........................] - ETA: 9:35 - loss: 11.0703 - accuracy: 0.2780

但不是将损失最小化,而是实际上是使损失最大化,每次迭代后精度都会下降。 (实际上,如果准确度指标正确,那么如果我只用not [prediction],那将是一个很好的分类器)。 这里有人可以向我解释此错误的含义是什么,以及它是否与模型的异常行为有关(并希望如何修复)?我一直在尝试寻找类似的错误,但找不到任何错误。 谢谢!

1 个答案:

答案 0 :(得分:0)

链接https://www.tensorflow.org/beta/tutorials/load_data/text和您的数据集中提到的教程之间有一个关键区别。

在该教程中,标签分别为0、1和2,即cowper.txt中的所有句子都标记为0derby.txt中的所有句子都标记为{{1 }},1中的所有句子都标记为butler.txt。但是在您的数据集中,2位于Labels每个句子的末尾。

我已经执行了包含您的数据集的代码,如下所示:

Text Files

为了处理上述差异,应该对函数FILE_NAMES = ['001.dev', '001.test', '001.train', '002.dev', '002.test', '002.train'] parent_dir = "Issue_55902068/OC" parent_dir 进行如下修改:

labeler

然后,将损失函数更改为def labeler(example, index): Label = tf.strings.split(example, sep="")[-1] #It will give 0 or 1 in Str format Label = tf.strings.to_number(Label) return example, tf.cast(Label, tf.int64) ,将优化器更改为binary_crossentropy,如下所示:

RMSprop

它正在按预期方式工作。输出的屏幕截图如下所示。

enter image description here

如果您认为此答案有用,请接受此答案和/或对其进行投票。谢谢。