这个错误是因为在计算embeddings
时,visual_embeddings
、position_embeddings
和spatial_position_embeddings
的尺寸不匹配。具体来说,visual_embeddings
的形状是[64, 49, 768],而position_embeddings
和spatial_position_embeddings
的形状都是[8, 49, 768]。为了解决这个问题,你需要确保这三个Tensor的尺寸在非单例维度0上相匹配。
你可以尝试将position_embeddings
和spatial_position_embeddings
的形状更改为[64, 49, 768],方法是在它们的维度上添加一个大小为1的维度。例如:
position_embeddings = position_embeddings[:, None, :]
spatial_position_embeddings = spatial_position_embeddings[:, None, :]
然后再执行计算embeddings
的操作。
5条答案
按热度按时间vlju58qv1#
根据我所了解的,如果不使用分布式启动参数运行代码,例如:
会出现错误。
ngynwnxp2#
看起来图像的shape[0]和bbox的shape[0]不同。你应该检查你的数据集实现。
2wnc66cl3#
我正在使用预定义的FUNSD数据集。我不认为那里应该有一个错误(希望如此)。
zour9fqk4#
当我尝试运行脚本
unilm/layoutlmft/examples/examples/run_funsd.py
时,我遇到了类似的错误,但是错误信息提到了不同大小的Tensor。看起来训练需要使用所有的GPU。我有两块。一旦我将
--nproc_per_node
更改为与GPU数量相匹配的数字:,错误就不再出现了。
ldfqzlk85#
看起来,当你仅使用一个GPU来训练模型时,你应该选择
export CUDA_VISIBLE_DEVICES=0
或其他单个GPU ID。