我正在尝试用变压器和Keras
复制"神经机器翻译"。模型从tensorflow
网站,我已经完全复制了一切,他们有它。当我去尝试使用他们提供的数据训练模型时,我一直得到以下错误:
AttributeError: 'Tensor' object has no attribute 'nested_row_splits'
the transformer.fit() takes train_batches as the input.
train_batches is type PrefetchDataset Size 810 and value
<PrefetchDataset element_spec((TensorSpec(shape=(None, None), dtype=tf.int64, name=None), Tensor<...>
dtype=tf.int64, name=None)), RaggedTensorSpec(TensorShape([None, None])
错误来自tensorflow
中的tf__masked_loss(label, pred)
有谁知道这个错误意味着什么以及如何修复它吗?
我试着看tensorflow
的代码,但我不能弄清楚。我从字面上复制tensorflow
网站的代码,所以我不知道该怎么做。我可以改变数据类型,但我觉得我不应该这样做。
您的解码器输入必须具有与接地真值相同的长度我建议你检查decoder_input
形状和ground_truth
形状如果有任何问题,您可以使用decoder_input.to_tensor( )
和ground_truth.to_tensor( )
规范化批长度
既然你提到你正在使用原始的tensorflow文档,我建议你检查你在这个函数中写的东西:
MAX_TOKENS=128
def prepare_batch(pt, en):
pt = tokenizers.pt.tokenize(pt) # Output is ragged.
pt = pt[:, :MAX_TOKENS] # Trim to MAX_TOKENS.
pt = pt.to_tensor() # Convert to 0-padded dense Tensor
en = tokenizers.en.tokenize(en)
en = en[:, :(MAX_TOKENS+1)]
en_inputs = en[:, :-1].to_tensor() # Drop the [END] tokens
en_labels = en[:, 1:].to_tensor() # Drop the [START] tokens
return (pt, en_inputs), en_labels