无法训练我的 keras 模型:(数据基数不明确:)

Ama*_*yan 7 nlp machine-learning text-classification tf.keras tensorflow2.0

我正在使用 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.
Run Code Online (Sandbox Code Playgroud)

我指的是名为Simple BERT using TensorFlow 2.0的中等文章 可在此处找到库 bert-for-tf2 的 git repo 。

请在此处找到完整代码。

是我的 colab 笔记本的链接

真的很感谢你的帮助!

小智 1

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

x = [INPUT_IDS,INPUT_MASKS,INPUT_SEGS]
y = list(train.SECTION)
Run Code Online (Sandbox Code Playgroud)

所以而不是

model.fit([INPUT_IDS,INPUT_MASKS,INPUT_SEGS], list(train.SECTION))
Run Code Online (Sandbox Code Playgroud)

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

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

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