【问题标题】:Unable to train my keras model : (Data cardinality is ambiguous:)无法训练我的 keras 模型:(数据基数不明确:)
【发布时间】:2020-03-28 01:19:15
【问题描述】:

我正在使用 bert-for-tf2 库来解决多类分类问题。我创建了模型,但训练引发以下错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-25-d9f382cba5d4> in <module>()
----> 1 model.fit([INPUT_IDS,INPUT_MASKS,INPUT_SEGS], list(train.SECTION))

5 frames
/tensorflow-2.0.0/python3.6/tensorflow_core/python/keras/engine/data_adapter.py in 
__init__(self, x, y, sample_weights, batch_size, epochs, steps, shuffle, **kwargs)
243             label, ", ".join([str(i.shape[0]) for i in nest.flatten(data)]))
244       msg += "Please provide data which shares the same first dimension."
--> 245       raise ValueError(msg)
246     num_samples = num_samples.pop()
247 

ValueError: Data cardinality is ambiguous:
x sizes: 3
y sizes: 6102
Please provide data which shares the same first dimension.

我指的是名为Simple BERT using TensorFlow 2.0的媒体文章 可以在 here 找到库 bert-for-tf2 的 git repo。

请找到完整代码here

Here 是我的 colab 笔记本的链接

非常感谢您的帮助!

【问题讨论】:

    标签: machine-learning nlp text-classification tensorflow2.0 tf.keras


    【解决方案1】:

    有同样的问题,不知道为什么输入和输出的数量应该相同,在这种情况下,当 x.shape[0] != y.shape[0] 时,这个错误似乎是从数据适配器之一引发的

    x = [INPUT_IDS,INPUT_MASKS,INPUT_SEGS]
    y = list(train.SECTION)
    

    所以而不是

    model.fit([INPUT_IDS,INPUT_MASKS,INPUT_SEGS], list(train.SECTION))
    

    尝试在字典中使用层名称给出输入和输出(检查模型摘要(也可以明确给出合适的名称)),对我有用

    model.fit(
         {
         "input_word_ids": INPUT_IDS,
         "input_mask": INPUT_MASKS,
         "segment_ids": INPUT_SEGS,
         },
        {"dense_1": list(train.SECTION)}
    )
    

    请确保输入和输出是 numpy 数组,例如:使用 np.asarray(),它会查找 .shape 属性

    【讨论】:

      猜你喜欢
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-28
      相关资源
      最近更新 更多