【问题标题】:`InvalidArgumentError` occurred when attempted to fit the CNN model in keras?尝试在 keras 中拟合 CNN 模型时发生“InvalidArgumentError”?
【发布时间】:2019-03-11 23:30:07
【问题描述】:

我为句子分类任务构建了卷积模型,模型编译成功。然而,当我尝试用我的训练/验证数据集拟合模型时,我在下面得到了奇怪的invalid argument error

InvalidArgumentError: indices[120,1] = 77 is not in [0, 70)
   [[{{node embedding_32/embedding_lookup}} = GatherV2[Taxis=DT_INT32, Tindices=DT_INT32, Tparams=DT_FLOAT,

_device="/job:localhost/replica:0/task:0/device:CPU:0"](embedding_32/embeddings/read, embedding_32/Cast, embedding_32/embedding_lookup/axis)]]

这是我的模型的架构(截图):

我是 keras 框架的新手,不太了解这个错误。重点是模型编译成功,但模型拟合抛出上述错误。

有什么方法可以调试这个错误?谁能指出我如何做到这一点?有什么想法吗?

【问题讨论】:

  • 这个错误只是说嵌入需要在 [0, 69] 范围内(含 69)的索引,但它看到一个值为 77 的索引。这与词汇量大小有关(第一个参数在你的嵌入)。
  • @MatiasValdenegro 我尝试了你对我的建议,但现在我收到了这个错误:InvalidArgumentError: indices[12,0] = 328 is not in [0, 70) [[{{node embedding_15/embedding_lookup}} = GatherV2[Taxis=DT_INT32, Tindices=DT_INT32, Tparams=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"](embedding_15/embeddings/read, embedding_15/Cast, embedding_15/embedding_lookup/axis)]]。我怎样才能解决这个问题?有什么想法吗?
  • 我没有提出任何可能的解决方案,这更像是一个概念问题而不是编程问题。问题是词汇表与输入数据中的索引不匹配。
  • @MatiasValdenegro 我该怎么办?你能指出我该怎么做或可能的具体解决方案来克服这个问题吗?谢谢
  • 我已经做了,我告诉过你检查词汇表是否适合训练和测试集,并且没有索引大于词汇表的大小。我不是 NLP 专家,您没有提供更多信息(例如更多代码)。

标签: python error-handling keras


【解决方案1】:

错误是说您的输入索引 77 大于您的 Embedding 期望的最大值 69。你有两个选择:

  • 将嵌入输入维度增加到 78 或真正增加到 np.max(x_train)+1
  • 仔细检查您的 x_train 以确保索引在 [0,70) 范围内。

来自documentation

input_dim: int > 0. 词汇表的大小,即最大整数索引 + 1。

【讨论】:

  • 我尝试了您的解决方案,但仍然出现同样的错误。为了让您了解我的实现,我创建了gist code for this problem 来查看我的实现。你能看看我的要点,为什么你的解决方案也不起作用?谢谢。
  • 这实际上取决于您如何预处理发送的x_train 数据。您的alphabet_size 需要基本正确。
猜你喜欢
  • 2022-07-21
  • 2019-02-10
  • 2021-04-09
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多