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

Posted

技术标签:

【中文标题】拟合 Keras 模型会产生错误“常量折叠失败:无效参数:不支持的类型:21”【英文标题】:Fitting a Keras model yields error "constant folding failed: Invalid argument: Unsupported type: 21" 【发布时间】:2019-09-18 00:02:35 【问题描述】:

我正在遵循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 并将优化器更改为 @987654324 @。 在拟合与教程中提出的模型相同的 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】:

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

在教程中,标签为0、1、2,即cowper.txt中的所有句子都标注为0derby.txt中的所有句子都标注为1,@中的所有句子987654328@ 被标记为2。但是在您的数据集中,标签位于文本文件的每个句子的末尾。

我已经执行了部分数据集的代码,如下所示:

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,如下所示:

model.compile(optimizer='RMSprop', loss='binary_crossentropy', metrics=['accuracy'])

它按预期工作。输出截图如下。

【讨论】:

以上是关于拟合 Keras 模型会产生错误“常量折叠失败:无效参数:不支持的类型:21”的主要内容,如果未能解决你的问题,请参考以下文章

在 Keras 中拟合模型时出现维度错误

训练 Keras 模型会产生多个优化器错误

用于多标签问题的 keras 模型的 scikit 学习链分类器的拟合方法错误

Keras和张量流连接和拟合错误

TensorFlow/Keras 多线程模型拟合

防止神经网络模型过拟合的6种方法及keras代码实现